闽公网安备 35020302035485号
.以 洲/城市 表示,例如,Asia/Shanghai,表示上海所在地的时区。不过这里的城市名称不是任意的城市,而是由国际标准组织规定的城市。
java.util.Date java.util.Calendar java.text.SimpleDateFormat1. Date
Date date = new Date(); // 可以打印当前日期时间 System.out.println(date.toString()); // 控制台输出 Thu Jan 05 18:41:11 CST 20232. SimpleDateFormat
.解析字符串格式的日期和时间
// 常用的格式化 String pattern1 = "yyyy-MM-dd HH:mm:ss"; SimpleDateFormat sdf1 = new SimpleDateFormat(pattern1); System.out.println(sdf1.format(date3)); // 输出 2023-01-05 18:19:50 String pattern2 = "yyyy年MM月dd日 HH时mm分ss秒"; SimpleDateFormat sdf2 = new SimpleDateFormat(pattern2); System.out.println(sdf2.format(date3)); // 输出 2023年01月05日 18时19分50秒parse 方法-字符串日期时间解析,从 String 到 Date
String input = "2023-01-01 00:00:01";
String pattern1 = "yyyy-MM-dd HH:mm:ss";
SimpleDateFormat sdf3 = new SimpleDateFormat(pattern1);
try {
// 将 String 类型的日期解析成 Date 类型的日期
Date parsed = sdf3.parse(input);
System.out.println(parsed);
} catch (ParseException e) {
e.printStackTrace();
}
3. CalendarCalendar calendar = Calendar.getInstance();当我们有一个 Calendar 对象后,就可以表示日期和时间了,通过设置各个字段,如年、月、日、时、分、秒等来表示一个具体的日期和时间。
calendar.set(Calendar.YEAR, 2023); // 设置年份为2023 calendar.set(Calendar.MONTH, Calendar.MAY); // 设置月份为5(从0开始,5表示六月) calendar.set(Calendar.DAY_OF_MONTH, 16); // 设置日期为16号日期和时间的计算
calendar.add(Calendar.DAY_OF_MONTH, 7); // 增加7天这将在当前日期的基础上增加 7 天。
| 方法 | 描述 |
|---|---|
| get(int field) | 返回给定字段的值。例如,calendar.get(Calendar.MONTH) 返回月份。 |
| set(int field, int value) | 设置给定字段的值。例如,calendar.set(Calendar.YEAR, 2023) 设置年份为2023。 |
| add(int field, int amount) | 增加或减少给定字段的值。例如,calendar.add(Calendar.DAY_OF_MONTH, 1) 将日期增加一天。 |
| getTime() | 返回表示此Calendar时间点的Date对象。 |
| setTime(Date date) | 使用指定的Date对象设置此Calendar的时间点。 |
| getTimeInMillis() | 返回以毫秒为单位表示此Calendar时间点的时间值。 |
| setTimeInMillis(long millis) | 使用指定的时间值设置此Calendar的时间点。 |
| getTimeZone() | 返回此Calendar使用的时区。 |
| setTimeZone(TimeZone zone) | 设置此Calendar的时区。 |
| isLenient() | 返回Calendar是否宽松,即是否允许非法日期。 |
| setLenient(boolean lenient) | 设置Calendar是否宽松。 |
| getActualMaximum(int field) | 返回给定字段的最大允许值。例如,calendar.getActualMaximum(Calendar.DAY_OF_MONTH) 返回当前月份的最大天数。 |
LocalDate now = LocalDate.now(); // 获取当前日期
LocalDate date = LocalDate.of(2023, 5, 15); // 创建指定日期
LocalDate parsedDate = LocalDate.parse("2023-05-15"); // 解析日期
int year = date.getYear(); // 获取年份
int month = date.getMonthValue(); // 获取月份
int day = date.getDayOfMonth(); // 获取日期
2. LocalTimeLocalTime time = LocalTime.now(); // 获取当前时间
LocalTime specificTime = LocalTime.of(14, 30, 0); // 创建指定时间
LocalTime parsedTime = LocalTime.parse("14:30:00"); // 解析时间
int hour = time.getHour(); // 获取小时
int minute = time.getMinute(); // 获取分钟
int second = time.getSecond(); // 获取秒
3. LocalDateTimeLocalDateTime dateTime = LocalDateTime.now(); // 获取当前日期和时间
LocalDateTime specificDateTime = LocalDateTime.of(2023, 5, 15, 14, 30); // 创建指定日期和时间
LocalDateTime parsedDateTime = LocalDateTime.parse("2023-05-15T14:30:00"); // 解析日期和时间,字母'T'用于分隔日期部分和时间部分。它的作用是明确表示日期和时间的分界线。
4. ZonedDateTimeZoneId zone = ZoneId.of("America/New_York"); // 创建时区
ZonedDateTime zonedDateTime = ZonedDateTime.now(zone); // 获取带有时区的当前日期和时间
带有时区信息的日期时间通常采用以下的格式:2023-09-08T11:30:00+08:00[Asia/Shanghai]这个例子表示的是 2023年9月8日11点30分,位于亚洲/上海时区,时区偏移量为+08:00,也就是东八区。在这种表示中,日期时间后面跟着时区信息,方括号内的部分为时区标识。
| 时区标识 | 时区 |
|---|---|
| Asia/Shanghai | 中国上海时区 |
| America/New_York | 美国纽约时区 |
| Europe/London | 英国伦敦时区 |
| America/Los_Angeles | 美国洛杉矶时区 |
| Asia/Tokyo | 日本东京时区 |
| Europe/Paris | 法国巴黎时区 |
| Australia/Sydney | 澳大利亚悉尼时区 |
| Africa/Cairo | 埃及开罗时区 |
| Pacific/Honolulu | 美国檀香山时区 |
| Asia/Dubai | 阿拉伯迪拜时区 |
LocalDateTime start = LocalDateTime.of(2023, 9, 8, 11, 0); LocalDateTime end = LocalDateTime.of(2023, 9, 8, 11, 30); Duration duration = Duration.between(start, end); // 计算两个时间点之间的时间差 long minutes = duration.toMinutes(); // 获取分钟数6. Period
LocalDate startDate = LocalDate.of(2023, 9, 1); LocalDate endDate = LocalDate.of(2023, 9, 8); Period period = Period.between(startDate, endDate); // 计算两个日期之间的时间差 int days = period.getDays(); // 获取天数7. DateTimeFormatter
// 堆代码 duidaima.com
LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = dateTime.format(formatter); // 格式化为字符串
LocalDateTime parsedDateTime = LocalDateTime.parse("2023-05-15 14:30:00", formatter); // 解析字符串为日期和时间
ZonedDateTime.now(ZoneId zone) 获取带有时区的当前日期和时间。
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.13.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.13.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.13.4.2</version>
</dependency>
说明:public class A {
@JsonFormat(pattern = "yyyy年MM月", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy年MM月")
private Date startTime;
@JsonFormat(pattern = "yyyy年MM月", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy年MM月")
private Date endTime;
}
public class B {
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date startTime;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date endTime;
}