已过时。从JDK 1.1版开始,替换为 - (Calendar.get(Calendar.ZONE_OFFSET)+ Calendar.get(Calendar.DST_OFFSET))/(60 * 1000)。
为何弃用?是否有更短的方式(Apache Commons?)以小时/分钟的形式获得UTC的偏移量?我有一个Date对象......我应该将它转换为JodaDate吗?
在你问为什么我想要UTC偏移之前 - 它只是记录它,仅此而已。
答案 0 :(得分:10)
这里有两个问题。
我认为这是因为他们实际上几乎弃用了Date的所有方法并将其逻辑移到了日历中。我们需要使用通用set
和get
参数来说明我们需要哪个特定字段。这种方法有一些优点:方法数量少,并且能够在每次循环通过不同字段的循环中运行setter。我个人经常使用这种技术:它使代码更短,更容易维护。
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)。