我想转换: 2018-06-04T21:00:00.000-07:00 到 2018-06-05 这是正确时区的日期(我不知道正确的时区是什么只有这-07:00)。
当您不知道正确的时区时,这是不可能的。
像您这样的字符串符合 ISO 8601 格式的偏移日期时间,即具有 UTC 偏移量的日期和时间(但没有时区)。所以唯一自然要做的就是将其解析为OffsetDateTime
:
String dateTimeString = "2018-03-04T03:45:00.000-07:00";
OffsetDateTime dateTime = OffsetDateTime.parse(dateTimeString);
System.out.println(dateTime);
输出:
2018-03-04T03:45-07:00
解析在没有任何显式格式化程序的情况下工作,因为解析 ISO 8601 格式OffsetDateTime
的其他日期时间类java.time
作为它们的默认值(并且还在它们的toString
方法中打印 ISO 8601 )。java.time
是现代 Java 日期和时间 API。(我故意选择了与您不同的日期和时间,以便说明我的下一个观点。)
要将其转换为日期,时区至关重要。让我们尝试使用三个不同的时区:
System.out.println(dateTime.atZoneSameInstant(ZoneId.of("Pacific/Apia")).toLocalDate());
System.out.println(dateTime.atZoneSameInstant(ZoneId.of("Pacific/Pago_Pago")).toLocalDate());
System.out.println(dateTime.atZoneSameInstant(ZoneId.of("Asia/Kamchatka")).toLocalDate());
输出:
2018-03-05
2018-03-03
2018-03-04
我们有三个不同的日期,3 月 3 日、4 日和 5 日。因为地球上任何地方的日期都不相同。做出你的选择。:-)
可能可以使用 JVM 的时区设置。如果是这样,请ZoneId.systemDefault()
用作 的参数atZoneSameInstant()
。不过,时区设置可以随时从程序的其他部分或在同一 JVM 中运行的其他程序更改。
是的,java.time
只需要至少Java 6。
org.threeten.bp
和子包中导入日期和时间类。java.time
.本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句