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