【发布时间】:2020-05-19 01:02:35
【问题描述】:
我有这部分代码用于获取 DateTimeZone 的联合国 ID
String timeZoneId = Calendar.getInstance().getTimeZone().getID();
DateTimeZone desTimeZone = DateTimeZone.forID(timeZoneId);
在war文件中执行这部分代码时,得到timeZoneId = "GMT+01:00"
但是当我在 main 方法中运行这部分代码时,我得到了 timeZoneId = "Europe/Paris"
第一个在第二行引发异常: 无法识别日期时区 id 'GMT+01:00'
我不知道为什么我有两个不同的结果!!!
如何在war文件和main方法(欧洲/巴黎)中得到相同的结果?
谢谢
编辑:添加方法的完整代码:
public static DateTime toLocalDateTime(String gmtDate) {
if (StringUtils.isBlank(gmtDate)) {
return null;
}
DateTime gmt = new DateTime(gmtDate, DateTimeZone.UTC);
String timeZoneId = Calendar.getInstance().getTimeZone().getID();
DateTimeZone desTimeZone = DateTimeZone.forID(timeZoneId);
DateTimeZone.setDefault(desTimeZone);
LocalDateTime locDateTime = gmt.withZone(DateTimeZone.getDefault()).toLocalDateTime();
return locDateTime.toDateTime();
}
【问题讨论】:
-
我想您不想在代码中只硬编码时区 ID?那你想要什么?
-
我想当我打电话给 DateTimeZone.forID(timeZoneId) 我得到“欧洲/巴黎”或其他 id 取决于城市
-
所以你想要系统默认时区?
-
我添加了完整的方法以更清晰
-
gmtDate到底是什么?