java-Date 类 1

## Java中的Date类

### 1. Date类的基本概念

`Date`类是Java标准库中的一个类,位于`java.util`包中。它表示特定的瞬间,精确到毫秒。`Date`类的主要作用是用于日期和时间的表示与操作。然而,自从Java 1.1版起,`Date`类的很多方法已经被废弃或替换,推荐使用`java.util.Calendar`、`java.util.GregorianCalendar`以及`java.time`包中的类。

### 2. Date类的构造方法

`Date`类提供了几种构造方法,用于创建`Date`对象。

#### 2.1 无参构造方法

无参构造方法创建一个表示当前日期和时间的`Date`对象。

```java
import java.util.Date;

public class DateExample {
    public static void main(String[] args) {
        Date now = new Date();
        System.out.println("Current date and time: " + now);
    }
}
```

#### 2.2 long参数的构造方法

这个构造方法接收一个长整型参数,表示自1970年1月1日00:00:00 GMT以来的毫秒数。

```java
import java.util.Date;

public class DateExample {
    public static void main(String[] args) {
        long milliseconds = 1633036800000L; // 2021-10-01 00:00:00 GMT
        Date specificDate = new Date(milliseconds);
        System.out.println("Specific date: " + specificDate);
    }
}
```

### 3. Date类的常用方法

尽管`Date`类的大部分方法已经被废弃,仍有一些方法是有效且常用的。

#### 3.1 getTime()

`getTime`方法返回自1970年1月1日00:00:00 GMT以来的毫秒数。

```java
import java.util.Date;

public class DateExample {
    public static void main(String[] args) {
        Date now = new Date();
        long milliseconds = now.getTime();
        System.out.println("Milliseconds since epoch: " + milliseconds);
    }
}
```

#### 3.2 toString()

`toString`方法返回日期的字符串表示,使用本地时区。

```java
import java.util.Date;

public class DateExample {
    public static void main(String[] args) {
        Date now = new Date();
        System.out.println("Date toString: " + now.toString());
    }
}
```

### 4. Date类的方法示例

#### 4.1 比较日期

`Date`类提供了几个方法用于比较两个日期,包括`before`、`after`和`equals`方法。

```java
import java.util.Date;

public class DateComparisonExample {
    public static void main(String[] args) {
        Date date1 = new Date(1633036800000L); // 2021-10-01 00:00:00 GMT
        Date date2 = new Date(1633123200000L); // 2021-10-02 00:00:00 GMT

        System.out.println("date1 before date2: " + date1.before(date2));
        System.out.println("date1 after date2: " + date1.after(date2));
        System.out.println("date1 equals date2: " + date1.equals(date2));
    }
}
```

#### 4.2 设置时间

`setTime`方法设置日期对象的时间,使用自1970年1月1日00:00:00 GMT以来的毫秒数。

```java
import java.util.Date;

public class DateSetTimeExample {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println("Original date: " + date);

        long milliseconds = 1633036800000L; // 2021-10-01 00:00:00 GMT
        date.setTime(milliseconds);
        System.out.println("Updated date: " + date);
    }
}
```

### 5. Deprecated方法和替代方案

自Java 1.1版起,许多`Date`类的方法被标记为废弃(deprecated),推荐使用`Calendar`类或`java.time`包中的类来替代。

#### 5.1 获取年份、月份和日期

以前可以使用`getYear`、`getMonth`和`getDate`方法获取日期的各个部分,现在推荐使用`Calendar`类。

```java
import java.util.Calendar;
import java.util.Date;

public class CalendarExample {
    public static void main(String[] args) {
        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);

        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH); // 注意:月份从0开始
        int day = calendar.get(Calendar.DAY_OF_MONTH);

        System.out.println("Year: " + year);
        System.out.println("Month: " + (month + 1)); // 月份+1
        System.out.println("Day: " + day);
    }
}
```

#### 5.2 设置年份、月份和日期

以前可以使用`setYear`、`setMonth`和`setDate`方法设置日期的各个部分,现在推荐使用`Calendar`类。

```java
import java.util.Calendar;

public class CalendarSetExample {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, 2021);
        calendar.set(Calendar.MONTH, Calendar.OCTOBER); // 月份从0开始
        calendar.set(Calendar.DAY_OF_MONTH, 1);

        Date date = calendar.getTime();
        System.out.println("Set date: " + date);
    }
}
```

### 6. Java 8及以上的日期和时间API

Java 8引入了新的日期和时间API,在`java.time`包中,提供了更强大和灵活的日期和时间处理能力。

#### 6.1 LocalDate、LocalTime和LocalDateTime

`LocalDate`表示日期(不包含时间),`LocalTime`表示时间(不包含日期),`LocalDateTime`表示日期和时间。

```java
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;

public class JavaTimeExample {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        LocalTime time = LocalTime.now();
        LocalDateTime dateTime = LocalDateTime.now();

        System.out.println("Current date: " + date);
        System.out.println("Current time: " + time);
        System.out.println("Current date and time: " + dateTime);
    }
}
```

#### 6.2 格式化日期和时间

使用`DateTimeFormatter`类可以格式化和解析日期和时间。

```java
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateTimeFormatterExample {
    public static void main(String[] args) {
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formattedDate = now.format(formatter);

        System.out.println("Formatted date and time: " + formattedDate);
    }
}
```

#### 6.3 日期和时间的解析

使用`DateTimeFormatter`解析日期和时间字符串。

```java
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class DateTimeParseExample {
    public static void main(String[] args) {
        String dateTimeString = "2023-06-22 15:45:30";
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter);

        System.out.println("Parsed date and time: " + dateTime);
    }
}
```

#### 6.4 时区处理

使用`ZonedDateTime`和`ZoneId`类处理带时区的日期和时间。

```java
import java.time.ZonedDateTime;
import java.time.ZoneId;

public class ZonedDateTimeExample {
    public static void main(String[] args) {
        ZonedDateTime dateTimeInUTC = ZonedDateTime.now(ZoneId.of("UTC"));
        ZonedDateTime dateTimeInParis = ZonedDateTime.now(ZoneId.of("Europe/Paris"));

        System.out.println("Current date and time in UTC: " + dateTimeInUTC);
        System.out.println("Current date and time in Paris: " + dateTimeInParis);
    }
}

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值