为什么不推荐使用Date.getTimezoneOffset?

时间:2012-05-07 17:03:50

标签: java date timezone utc

Date.getTimezoneOffset的文档说:

  

已过时。从JDK 1.1版开始,替换为    - (Calendar.get(Calendar.ZONE_OFFSET)+ Calendar.get(Calendar.DST_OFFSET))/(60 * 1000)。

为何弃用?是否有更短的方式(Apache Commons?)以小时/分钟的形式获得UTC的偏移量?我有一个Date对象......我应该将它转换为JodaDate吗?

在你问为什么我想要UTC偏移之前 - 它只是记录它,仅此而已。

3 个答案:

答案 0 :(得分:10)

这里有两个问题。

  1. 为什么不推荐使用Date.getTimezoneOffset?
  2. 我认为这是因为他们实际上几乎弃用了Date的所有方法并将其逻辑移到了日历中。我们需要使用通用setget参数来说明我们需要哪个特定字段。这种方法有一些优点:方法数量少,并且能够在每次循环通过不同字段的循环中运行setter。我个人经常使用这种技术:它使代码更短,更容易维护。

    1. 快捷方式?但是调用
    2. 有什么问题

      Calendar.get(Calendar.DST_OFFSET)比较 Calendar.getTimeZoneOffset()

      据我所知,差异是6个字符。

      Joda是一个非常强大的库,如果你真的需要编写很多复杂的日期操作代码切换到它。我个人使用标准java.util.Calendar并且没有任何理由使用外部库:好的旧日历对我来说已经足够了。

答案 1 :(得分:3)

一旦Java实现者意识到可能需要针对不同类型的日历以不同方式实现(因此需要使用Date来检索),所有日期操作逻辑都移出GregorianCalendar现在这个信息)。 Date现在只是UTC时间值的包装。

答案 2 :(得分:2)

在从此页面粘贴代码之前请务必小心。 也许只是我,但我相信,为了在几分钟内得到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的标准偏移量(以msecs为单位)。这与DST不会改变。例如,对于美国东海岸时区,无论DST如何,此字段始终为-6小时。

Calendar.DST_OFFSET为您提供当前的DST偏移量(以msecs为单位) - 如果有的话。例如,在夏季使用DST的国家/地区,此字段的值可能为+1小时(1000 * 60 * 60 msecs)。