【发布时间】:2013-04-15 10:03:38
【问题描述】:
问题已解决 外部设备正在计算和发送非标准的 2 小时偏移时间戳,这让我非常困惑并开始了这个线程。 时间戳本身不受时区影响,时区仅在转换为人类可读形式时适用。
我在 UTC 时区有时间戳(距 unix 纪元的秒数) - 没有 DST(夏令时)。
我想要使用 DST 的“欧洲/布拉格”时区的时间戳(距 unix 纪元的秒数)。
我曾经认为 unix 时间戳不受时区约束,时区仅影响将时间戳转换为人类可读格式的过程。但它看起来不像那样。我越是尝试转换它(使用 Calendar 和 TimeZone 类),我就越困惑和迷失。
此代码无法按预期工作:
Calendar cal = GregorianCalendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.setTimeInMillis(ts*1000);
cal.setTimeZone(TimeZone.getTimeZone("Europe/Prague"));
return cal.getTimeInMillis()/1000;
【问题讨论】:
-
它有什么作用?打印出每行代码之间的 cal 会发生什么?
-
您或许应该说明您是否对Joda-Time 解决方案感兴趣,因为我怀疑您会开始收到它们。
-
@Peter 对于最近的时间戳 '1366642620' 它返回了相同的时间戳 - 没有发生转换。如果我尝试在 UTC 和欧洲/布拉格时区的 PHP 中打印该时间戳,我会得到不同的时间:14:57 和 16:57
-
当您 getTimeInMillis() 时,您将丢弃刚刚添加的 TimeZone。请参阅我的答案中的示例。
标签: java timezone dst java.util.date