【发布时间】:2022-11-10 19:20:59
【问题描述】:
我有一个运行旧版本的 spring 应用程序的应用程序。该应用程序具有使用 Date.parse 创建日期对象的功能,如下所示
Date getCstTimeZoneDateNow() {
String dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
def zonedDateString = new Date().format(dateFormat, TimeZone.getTimeZone('CST'))
Date date = Date.parse(dateFormat, zonedDateString)
return date // Tue Oct 18 20:36:12 EDT 2022 (in Date)
}
但是,不推荐使用上面的代码。我需要产生相同的结果。
我阅读了其他帖子,似乎首选Calender 或SimpleDateFormatter。
而且我认为SimpleDateFormatter 具有更多功能。
这篇文章帮助我更多地了解以下代码中发生的事情 SimpleDateFormat parse loses timezone
Date getCstTimeZoneDateNow() {
Date now = new Date()
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
SimpleDateFormat sdf = new SimpleDateFormat()
sdf.setTimeZone(TimeZone.getTimeZone('CST'))
// cstDateTime prints times in cst
String cstDateTime = sdf.format(now) // 2022-10-18T20:36:12.088Z (in String)
// JVM current time
Date date = sdf.parse(cstDateTime) // Tue Oct 18 21:36:12 EDT 2022 (in Date)
return date
}
在这里,我的目标是返回格式为 Tue Oct 18 20:36:12 EDT 2022 的日期对象
格式很好。但是,正如帖子所说,当我执行sdf.parse() 时,它会在 JVM 时间打印。
这意味着,格式很好,但时区已关闭。
我怎样才能得到与以前完全相同的结果?
它不必使用SimpleDateFormatter。可以是任何东西。
非常感谢您的阅读和您的时间。
【问题讨论】:
-
您使用的是 Java 8+ 吗?
-
是的,它是 Java 8
-
似乎
Calender或SimpleDateFormatter是首选不,恰恰相反!这些类设计不佳且早已过时,后者尤其是出了名的麻烦。在 Java 或 JVM 中,您绝对应该使用 java.time, the modern Java date and time API。
标签: spring-boot date groovy timezone simpledateformat