【发布时间】:2017-07-06 12:42:05
【问题描述】:
我正在尝试将 dateTime 字符串从 Europe/London 时间转换为 UTC。
谷歌搜索告诉我 UTC 应该比 Europe/London 时间晚一个小时,但是当我尝试编写单元测试来验证这一点时,时间计算结果在相同的纪元时间内。我还尝试了另一个时区(Asia/Kolkata),并且工作正常。所以我很困惑,不知道我做错了什么。
这是我正在使用的函数(日期字符串为 2017-01-15 13:00:00 和上述两个时区)
long getUTCTimeEpoch(final String dateString, @NonNull final String fromTimeZone) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ROOT);
formatter.setTimeZone(TimeZone.getTimeZone(fromTimeZone));
try {
Date inputTime = formatter.parse(dateString);
Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(fromTimeZone));
calendar.setTime(inputTime);
Calendar utcCalendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
utcCalendar.setTimeInMillis(calendar.getTimeInMillis());
return utcCalendar.getTime().getTime();
} catch (ParseException e) {
return 0;
}
}
这行得通,
assertThat(getUTCTimeEpoch(timeString, "Asia/Kolkata"), is(1484465400000))
这失败了,
assertThat(getUTCTimeEpoch(timeString, "Europe/London"), is(1484481600000))
【问题讨论】:
-
是否可以使用更现代的时间库,比如三十 abp?
-
这是我目前唯一需要这样做的地方,所以最好不要,但即使我这样做,我仍然想知道为什么上述方法不起作用
-
您是否考虑了夏令时(伦敦存在,但 UTC 不存在)?
-
你得到的不是
1484485200000,而是什么价值? -
对不起,它是 1484485200000(我也在帖子中更新了正确的时间)