vir*_*hah 2 java simpledateformat java-8 localdate
我想将字符串日期(指定了时区)转换为LocalDate。
String format = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
String date = "2019-08-31T17:00:00.000-07:00";
System.out.println("LocalDate: " + LocalDate.parse(date, DateTimeFormatter.ofPattern(format)));
System.out.println("Date: " + new SimpleDateFormat(format).parse(date));
Run Code Online (Sandbox Code Playgroud)
上面代码的输出是
LocalDate: 2019-08-31
Date: Sun Sep 01 05:30:00 IST 2019
Run Code Online (Sandbox Code Playgroud)
我无法获得与SimpleDateFormat相同的结果。我想要LocalDate中的2019-09-01。
请注意,旧Date类表示时间点,而不是本地日期。碰巧的是,Date.toString输出字符串就像在系统时区一样。
java.time API迫使您对想要的东西进行更深入的思考。它提供了不同的类型来表示不同的时间概念。LocalDate.parse仅会解释字符串的“本地日期”部分。
您的日期字符串代表OffsetDateTime,因此您应该使用OffsetDateTime.parse。现在您有一个LocalDateTime加号ZoneOffset。要使其成为09-01,您必须更改其时区,同时使其保持不变,这可以使用完成atZoneSameInstant,然后获取其本地日期部分:
System.out.println("LocalDate: " +
OffsetDateTime.parse(date, DateTimeFormatter.ofPattern(format))
.atZoneSameInstant(ZoneOffset.systemDefault())
.toLocalDate());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
569 次 |
| 最近记录: |