【发布时间】:2020-08-22 19:20:48
【问题描述】:
我支持一个大型企业应用程序,我们有两个类使用 LocalDate.now 来获取时间戳,一个使用 joda 时间,一个使用 Java 时间。通常我们每晚都重新开始,但本周早些时候我们无法重新开始。在应用程序运行的第二天,使用 joda 时间的类返回了正确的日期(20200505),但使用 Java 时间的类返回了应用程序开启的日期(20200504)。
这两个类在每次调用时都会在方法中对 LocalDate.now 进行新调用。
Java时间:
String date = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
//Use timestamp
乔达时间:
LocalDate date = LocalDate.now();
String format1 = date.toString("MM/dd/yyyy");
//Use date
为什么 LocalDate.now 的 Java 8 实现在服务器日期更改后没有重新启动应用程序就返回错误的日期?
【问题讨论】:
-
应用程序是否在两个不同的主机上运行?
-
我怀疑这是代码问题并质疑您的设置。这两个类都使用系统时钟提供的信息。如果系统时钟显示它仍然是 4-th,那么 Java(和 Joda)将返回 4-th。特别是因为它是
LocalDate,因此不包括任何时区。 -
你能edit你的问题并包括minimal reproducible example吗?
-
no-arg
LocalDate.now方法(java.time 和 Joda-Time)都使用默认时区(所有时区中的日期都不会相同)。可以将 Joda-Time 的默认DateTimeZone设置为与 JVM 的默认时区不同,这可能是观察到的差异的一种可能解释(尽管可能不是最有可能的?)。 -
这些类在同一个应用程序中,处理不同的文件类型。主机使用东部时区,但是Java时间的故障发生在第二天下午2点左右,所以即使Java时间使用了一个奇怪的时区,它应该已经超过了日期更改。服务器时间在 EST 中是准确的,因为我们的日志显示了正确的时间戳。