Java 从欧洲/伦敦时间转换为UTC时出现的问题

Java 从欧洲/伦敦时间转换为UTC时出现的问题,java,android,timezone,Java,Android,Timezone,我正在尝试将日期时间字符串从Europe/Londontime转换为UTC 谷歌告诉我UTC应该比欧洲/伦敦时间晚一个小时,但当我试图编写一个单元测试来验证这一点时,时间计算结果是在相同的纪元时间。我还尝试了另一个时区(Asia/Kolkata),效果很好。所以我很困惑,不知道我做错了什么 这是我正在使用的函数(日期字符串为2017-01-15 13:00:00,以及上述两个时区) 这很有效 assertThat(getUTCTimeEpoch(timeString, "Asia/Kolkata

我正在尝试将日期时间字符串从
Europe/London
time转换为UTC

谷歌告诉我UTC应该比欧洲/伦敦时间晚一个小时,但当我试图编写一个单元测试来验证这一点时,时间计算结果是在相同的纪元时间。我还尝试了另一个时区(
Asia/Kolkata
),效果很好。所以我很困惑,不知道我做错了什么

这是我正在使用的函数(日期字符串为
2017-01-15 13:00:00
,以及上述两个时区)

这很有效

assertThat(getUTCTimeEpoch(timeString, "Asia/Kolkata"), is(1484465400000))
而这失败了

assertThat(getUTCTimeEpoch(timeString, "Europe/London"), is(1484481600000))

在这种转换过程中,很多玩家都参与其中,其中有几位:

  • 来自两个不同时区的当地时间
  • 当地时区规则(英国夏令时、格林尼治标准时间与湿润时间;CET/CEST等)
解决方案:使用可以处理所有需要的东西的


看看你,伦敦的。

2017-01-15 13:00:00
也是UTC,因为2017-01-15 13:00:00在一月,当地时间与UTC相同。这就是为什么会得到毫秒值
1484485200000

UTC仅在DST期间落后伦敦一小时,DST通常发生在3月至10月之间。例如,如果您使用7月份的日期,则会有1小时的差异


毫数值
1484481600000
相当于
2017-01-15 12:00:00
(在伦敦和UTC)。只需相应地更改值,测试就会通过。

是否可以使用更现代的时间库,如three ten abp?这是我目前唯一需要这样做的地方,因此最好不要这样做,但即使我这样做了,我仍然想知道为什么上面的内容不适用于DST(存在于伦敦,但不适用于utc)?你得到的不是1484485200000,而是什么价值?很抱歉,是1484485200000(我在帖子中也更新了正确的时间):facepalm:谢谢!
assertThat(getUTCTimeEpoch(timeString, "Europe/London"), is(1484481600000))