【发布时间】:2021-06-16 23:25:28
【问题描述】:
我在从外部系统接收到的持久存储中具有日期时间。我需要使用它并将其设置为 Java 库例程的 Date 类型。这弄乱了在当前 jvm 时区下设置的相同内容。我知道偏移量可能不一定对应时区,但是,这会搞砸很多事情。
例如:
2020-08-14T08:59:34.961+05:30
示例代码:
String dateFromDatabase = "2020-08-14T08:59:34.961+05:30";
SimpleDateFormat outputDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
Date tempDate=outputDateFormat.parse(dateFromDatabase);
System.out.println( tempDate );
样本输出:
Thu Aug 13 23:29:34 EDT 2020
预期输出:
it should not return the EDT based datetime
我怎样才能让我的日期保持正确的偏移量?
关于如何实现这一点的任何建议/建议?
谢谢
【问题讨论】:
-
使用不那么新的
java.timepackage:ZonedDateTime.parse(dateFromDatabase) -
@user15244370 是的,我试过了,但是它没有给我 Date 类型,这是我需要将它传递给库例程的...任何转换为 Date 类型的步骤都是问题。
-
Date只是一个瞬间 - 如果您打印它 (toString),您将使用实际默认的TimeZone获得它的表示 - 所以 库可能也在使用它(尝试,为了测试,改变TimeZone.setDefault(TimeZone.getTimeZone(zonedDate.getZone())(这可能会在代码的其他地方搞砸) -
据我了解,您想解析
2020-08-14T08:59:34.961+05:30并保持时间与08:59:34.961一样,对吗? -
我建议你不要使用
SimpleDateFormat和Date。这些类设计不良且过时,尤其是前者,尤其是出了名的麻烦。相反,只需使用来自java.time, the modern Java date and time API 的OffsetDateTime。
标签: java timezone offset timezone-offset datetimeoffset