繁体   English   中英

将此“yyyy-MM-dd'T'HH:mm:ss.SSSXXX”格式的字符串转换为LocalDate

[英]Convert String of this “yyyy-MM-dd'T'HH:mm:ss.SSSXXX” format to 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));

和上面代码的 output 是

LocalDate: 2019-08-31
Date: Sun Sep 01 05:30:00 IST 2019

我无法获得与 SimpleDateFormat 相同的结果。 我想要 LocalDate 中的 2019-09-01。

请注意,旧的Date class 表示时间点,而不是本地日期。 碰巧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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM