LocalDate,LocalDateTime,Date,日期串相互转换
1. 获取当前时间 XXX.now()
java
public void testCurrentDate() {
LocalDate curLocalDate = LocalDate.now();
System.out.println("地心侠士: "+curLocalDate.toString());
LocalTime curLoacalTime = LocalTime.now();
System.out.println("地心侠士: "+curLoacalTime.toString());
LocalDateTime curLocalDateTime = LocalDateTime.now();
System.out.println("地心侠士: "+curLocalDateTime.toString());
Instant curInstant = Instant.now();
System.out.println("地心侠士: "+ curInstant.toString());
}
输出结果
txt
地心侠士: 2026-02-04
地心侠士: 17:15:59.715639800
地心侠士: 2026-02-04T17:15:59.715639800
地心侠士: 2026-02-04T09:15:59.715639800Z
说明:
- LocalDate,LocalTime,LocalDateTime都是当前时区对应日期或时间
- Instant获取到的是UTC+0 日期和时间
- Z 代表零时区(UTC+0) T 日期和时间的分割符
2. 时间戳转成LocalDateTime
java
public void testTimestamp() {
Long timeStamp = 1769577638767L;
Instant instant = Instant.ofEpochMilli(timeStamp);
System.out.println("地心侠士: " + instant.toString());
LocalDateTime cvLocalDate = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
System.out.println("地心侠士: " + cvLocalDate.toString());
LocalDateTime localDateT1 = LocalDateTime.ofEpochSecond(timeStamp / 1000, 0, ZoneOffset.ofHours(8));
System.out.println("地心侠士: " + localDateT1.toString());
}
输出结果
txt
地心侠士: 2026-01-28T05:20:38.767Z
地心侠士: 2026-01-28T13:20:38.767
地心侠士: 2026-01-28T13:20:38
说明:
- 使用方法 LocalDateTime.ofInstant 或者 LocalDateTime.ofEpochSecond
- 使用 ofInstant ,毫秒时间戳可以直接使用
- 使用 ofEpochSecond ,毫秒时间戳需要除以1000
- ofInstant 使用 ZoneId.systemDefault() 获取当时区
- OfEpochSecond 使用 ZoneOffset.ofHours(8) 指定需要的时区
- ZoneId.systemDefault() 当前时区,等同的有
ZoneId.of("Asia/Shanghai")ZoneId.of("GMT+8")ZoneId.of("UTC+08:00")ZoneId.of("+08:00")
3. 时间串转换成LocalDateTime
java
public void testDateStr() {
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");
String dateStr = "2026-01-28 18:20:38.767";
LocalDateTime localDateTime = LocalDateTime.parse(dateStr, df);
System.out.println("地心侠士: " + localDateTime.toString());
LocalDateTime defaultParse = LocalDateTime.parse("2026-01-28T18:20:38");
System.out.println("地心侠士: " + defaultParse.toString());
DateTimeFormatterBuilder dfBuild = new DateTimeFormatterBuilder();
DateTimeFormatter dynmicDf = dfBuild.appendPattern("yyyy-MM-dd")
.optionalStart()
.appendLiteral(' ')
.optionalEnd()
.optionalStart()
.appendLiteral('T')
.optionalEnd()
.appendPattern("HH:mm:ss")
.toFormatter();
LocalDateTime dynamic1 = LocalDateTime.parse("2026-01-28T18:20:38", dynmicDf);
System.out.println("地心侠士: " + dynamic1.toString());
LocalDateTime dynamc2 = LocalDateTime.parse("2026-01-28 18:20:38", dynmicDf);
System.out.println("地心侠士: " + dynamc2.toString());
}
输出结果:
地心侠士: 2026-01-28T18:20:38.767
地心侠士: 2026-01-28T18:20:38
地心侠士: 2026-01-28T18:20:38
地心侠士: 2026-01-28T18:20:38
说明:
- 使用方法LocalDateTime.parse结合DateTimeFormatter转换
- 默认转换格式为yyyy-MM-ddTHH:mm:ss
- 使用
DateTimeFormatterBuilder可以实现多种日期串转换成LocalDateTime
4. LocalDateTime转换成成LocalDate和Date
java
public void testDateConvert() {
LocalDateTime dt = LocalDateTime.now();
System.out.println("地心侠士 " + dt.toString());
System.out.println("LocalDateTime=>LocalDate");
LocalDate localDate = dt.toLocalDate();
System.out.println("地心侠士 " + localDate.toString());
System.out.println("LocalDateTime=>Date");
Instant instant = dt.toInstant(ZoneOffset.ofHours(8));
Date d = Date.from(instant);
System.out.println("地心侠士 " + d);
}
输出结果:
txt
地心侠士 2026-02-06T19:09:35.092605300
LocalDateTime=>LocalDate
地心侠士 2026-02-06
LocalDateTime=>Date
地心侠士 Fri Feb 06 19:09:35 CST 2026
5. Date 转换成LocalDateTime
java
public void testDateConvert2() {
Date date = new Date();
System.out.println("地心侠士 " + date.toString());
System.out.println("Date=>LocalDateTime");
Instant instant = date.toInstant();
LocalDateTime lcd = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
System.out.println("地心侠士 " + lcd.toString());
}
输出结果:
txt
地心侠士 Fri Feb 06 19:15:38 CST 2026
Date=>LocalDateTime
地心侠士 2026-02-06T19:15:38.122
6. 北京时间时区表示
java
public void testZone() {
ZoneId zonidGMT8 = ZoneId.of("GMT+8");
LocalDateTime gmt8 = LocalDateTime.ofInstant(Instant.now(), zonidGMT8);
System.out.println("地心侠士: " + gmt8.toString());
ZoneId zonidAS = ZoneId.of("Asia/Shanghai");
LocalDateTime as = LocalDateTime.ofInstant(Instant.now(), zonidAS);
System.out.println("地心侠士: " + as.toString());
ZoneId zonidUTC8 = ZoneId.of("UTC+08:00");
LocalDateTime utc = LocalDateTime.ofInstant(Instant.now(), zonidUTC8);
System.out.println("地心侠士: " + utc.toString());
ZoneId zonid8 = ZoneId.of("+08:00");
LocalDateTime ad8= LocalDateTime.ofInstant(Instant.now(), zonid8);
System.out.println("地心侠士: " + ad8.toString());
}
输出结果:
txt
地心侠士: 2026-02-06T18:35:26.921795200
地心侠士: 2026-02-06T18:35:26.928776600
地心侠士: 2026-02-06T18:35:26.928776600
地心侠士: 2026-02-06T18:35:26.928776600