已弃用。从 JDK 版本 1.1 开始,替换为 -(Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000)。
为什么它被弃用了?是否有更短的方法(Apache Commons?)以小时/分钟获得UTC的偏移量?我有一个 Date 对象...我应该为此将它转换为 JodaDate 吗?
在你问我为什么想要 UTC 偏移量之前 - 它只是记录它,仅此而已。
已弃用。从 JDK 版本 1.1 开始,替换为 -(Calendar.get(Calendar.ZONE_OFFSET) + Calendar.get(Calendar.DST_OFFSET)) / (60 * 1000)。
为什么它被弃用了?是否有更短的方法(Apache Commons?)以小时/分钟获得UTC的偏移量?我有一个 Date 对象...我应该为此将它转换为 JodaDate 吗?
在你问我为什么想要 UTC 偏移量之前 - 它只是记录它,仅此而已。
这里有2个问题。
我认为这是因为他们实际上弃用了几乎所有 Date 方法并将其逻辑移至日历。我们应该使用泛型set
,并get
带有说明我们需要哪个特定字段的参数。这种方法有一些优点:方法数量较少,并且能够在每次传递不同字段的循环中运行设置器。我个人经常使用这种技术:它使代码更短且更易于维护。
Calendar.get(Calendar.DST_OFFSET)
比较
Calendar.getTimeZoneOffset()
据我所知,区别是6个字符。
Joda 是一个非常强大的库,如果你真的需要编写很多复杂的日期操作代码,请切换到它。我个人使用该标准java.util.Calendar
并且看不到任何使用外部库的理由:好的旧日历对我来说已经足够了。
Date
一旦 Java 实现者意识到对于不同类型的日历可能需要以不同方式实现(因此现在需要使用 aGregorianCalendar
来检索此信息),所有日期操作逻辑都被移出。ADate
现在只是一个 UTC 时间值的包装器。
在从该页面粘贴代码之前要小心。也许只有我,但我相信为了在几分钟内获得 tz 偏移量,你需要做
int tzOffsetMin = (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET))/(1000*60);
而不是Javadoc所说的,即:
int tzOffsetMin = -(cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET))/(1000*60);
Calendar.ZONE_OFFSET
为您提供与 UTC 的标准偏移量(以毫秒为单位)。这不会随着夏令时而改变。例如,对于美国东海岸时区,无论 DST 如何,该字段始终为 -6 小时。
Calendar.DST_OFFSET
为您提供当前的 DST 偏移量(以毫秒为单位) - 如果有的话。例如,在使用 DST 的国家/地区的夏季,该字段的值可能为 +1 小时(1000*60*60 毫秒)。