LocalDate,LocalDateTime,Date,日期串相互转换
1. 获取当前时间 XXX.now()
publicvoidtestCurrentDate(){LocalDatecurLocalDate=LocalDate.now();System.out.println("地心侠士: "+curLocalDate.toString());LocalTimecurLoacalTime=LocalTime.now();System.out.println("地心侠士: "+curLoacalTime.toString());LocalDateTimecurLocalDateTime=LocalDateTime.now();System.out.println("地心侠士: "+curLocalDateTime.toString());InstantcurInstant=Instant.now();System.out.println("地心侠士: "+curInstant.toString());}输出结果
地心侠士: 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
publicvoidtestTimestamp(){LongtimeStamp=1769577638767L;Instantinstant=Instant.ofEpochMilli(timeStamp);System.out.println("地心侠士: "+instant.toString());LocalDateTimecvLocalDate=LocalDateTime.ofInstant(instant,ZoneId.systemDefault());System.out.println("地心侠士: "+cvLocalDate.toString());LocalDateTimelocalDateT1=LocalDateTime.ofEpochSecond(timeStamp/1000,0,ZoneOffset.ofHours(8));System.out.println("地心侠士: "+localDateT1.toString());}输出结果
地心侠士: 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
publicvoidtestDateStr(){DateTimeFormatterdf=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS");StringdateStr="2026-01-28 18:20:38.767";LocalDateTimelocalDateTime=LocalDateTime.parse(dateStr,df);System.out.println("地心侠士: "+localDateTime.toString());LocalDateTimedefaultParse=LocalDateTime.parse("2026-01-28T18:20:38");System.out.println("地心侠士: "+defaultParse.toString());DateTimeFormatterBuilderdfBuild=newDateTimeFormatterBuilder();DateTimeFormatterdynmicDf=dfBuild.appendPattern("yyyy-MM-dd").optionalStart().appendLiteral(' ').optionalEnd().optionalStart().appendLiteral('T').optionalEnd().appendPattern("HH:mm:ss").toFormatter();LocalDateTimedynamic1=LocalDateTime.parse("2026-01-28T18:20:38",dynmicDf);System.out.println("地心侠士: "+dynamic1.toString());LocalDateTimedynamc2=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
publicvoidtestDateConvert(){LocalDateTimedt=LocalDateTime.now();System.out.println("地心侠士 "+dt.toString());System.out.println("LocalDateTime=>LocalDate");LocalDatelocalDate=dt.toLocalDate();System.out.println("地心侠士 "+localDate.toString());System.out.println("LocalDateTime=>Date");Instantinstant=dt.toInstant(ZoneOffset.ofHours(8));Dated=Date.from(instant);System.out.println("地心侠士 "+d);}输出结果:
地心侠士 2026-02-06T19:09:35.092605300 LocalDateTime=>LocalDate 地心侠士 2026-02-06 LocalDateTime=>Date 地心侠士 Fri Feb 06 19:09:35 CST 20265. Date 转换成LocalDateTime
publicvoidtestDateConvert2(){Datedate=newDate();System.out.println("地心侠士 "+date.toString());System.out.println("Date=>LocalDateTime");Instantinstant=date.toInstant();LocalDateTimelcd=LocalDateTime.ofInstant(instant,ZoneId.systemDefault());System.out.println("地心侠士 "+lcd.toString());}输出结果:
地心侠士 Fri Feb 06 19:15:38 CST 2026 Date=>LocalDateTime 地心侠士 2026-02-06T19:15:38.1226. 北京时间时区表示
publicvoidtestZone(){ZoneIdzonidGMT8=ZoneId.of("GMT+8");LocalDateTimegmt8=LocalDateTime.ofInstant(Instant.now(),zonidGMT8);System.out.println("地心侠士: "+gmt8.toString());ZoneIdzonidAS=ZoneId.of("Asia/Shanghai");LocalDateTimeas=LocalDateTime.ofInstant(Instant.now(),zonidAS);System.out.println("地心侠士: "+as.toString());ZoneIdzonidUTC8=ZoneId.of("UTC+08:00");LocalDateTimeutc=LocalDateTime.ofInstant(Instant.now(),zonidUTC8);System.out.println("地心侠士: "+utc.toString());ZoneIdzonid8=ZoneId.of("+08:00");LocalDateTimead8=LocalDateTime.ofInstant(Instant.now(),zonid8);System.out.println("地心侠士: "+ad8.toString());}输出结果:
地心侠士: 2026-02-06T18:35:26.921795200 地心侠士: 2026-02-06T18:35:26.928776600 地心侠士: 2026-02-06T18:35:26.928776600 地心侠士: 2026-02-06T18:35:26.928776600原文地址:https://mp.weixin.qq.com/s/vH0TJKl89CfV3ehvHllgNg