Java 为什么Date.getTimezoneOffset被弃用?
文件说明: 不赞成。从JDK版本1.1起,替换为 -(Calendar.get(Calendar.ZONE_OFFSET)+Calendar.get(Calendar.DST_OFFSET))/(60*1000) 为什么它被弃用?是否有较短的方法(Apache Commons?)以小时/分钟为单位获得UTC的偏移量?我有一个约会对象。。。我应该把它换成JodaDate吗Java 为什么Date.getTimezoneOffset被弃用?,java,date,timezone,utc,Java,Date,Timezone,Utc,文件说明: 不赞成。从JDK版本1.1起,替换为 -(Calendar.get(Calendar.ZONE_OFFSET)+Calendar.get(Calendar.DST_OFFSET))/(60*1000) 为什么它被弃用?是否有较短的方法(Apache Commons?)以小时/分钟为单位获得UTC的偏移量?我有一个约会对象。。。我应该把它换成JodaDate吗 在你问我为什么需要UTC偏移量之前,只需要记录它,没什么了。一旦Java实现者意识到可能需要对不同类型的日历进行不同的实现,所
在你问我为什么需要UTC偏移量之前,只需要记录它,没什么了。一旦Java实现者意识到可能需要对不同类型的日历进行不同的实现,所有的日期操作逻辑都被移出了
date
(因此现在需要使用GregoriaCalendar
来检索此信息。Date
现在只是UTC时间值的包装。这里有两个问题
set
和get
参数来表示我们需要哪个特定字段。这种方法有一些优点:方法数量较少,并且能够在通过我个人经常使用这种技术:它使代码更短,更易于维护
Calendar.get(Calendar.DST_OFFSET)
与比较
Calendar.getTimeZoneOffset()
据我所知,差别是6个字符
Joda是一个非常强大的库,如果您真的需要编写大量复杂的日期操作代码,请切换到它。我个人使用标准的
java.util.Calendar
,并且不认为有任何理由使用外部库:好的旧日历对我来说已经足够了。在粘贴此页面中的代码之前请小心。
也许只有我,但我相信为了在几分钟内得到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而改变。例如,对于美国东海岸时区,无论DST如何,此字段始终为-6小时
Calendar.DST_OFFSET
提供当前DST偏移量(以毫秒为单位)-如果有。例如,在使用DST的国家/地区的夏季,此字段的值可能为+1小时(1000*60*60毫秒).对于Java IMHO中与日期和时间处理相关的任何内容,您都应该切换到JodaTime。因为不是每个时区偏移量都是整数。换句话说,不是每个时区都比相邻时区早或晚一个小时。请查看@GilbertLeBlanc-它返回分钟,而不是小时。@pcalcao-我有一个来自API我不控制,我不能“切换到JodaTime”。我可以将Date对象包装为JodaTime对象,然后使用它…我建议这是一个可能的答案。@ripper234:Oops。谢谢你的更正。我接受这一点,因为他们实际上不推荐所有日期方法。
。所有人都建议我切换到joda-冷静,这是我正在使用的API中的日期对象,我无法实现我现在可以更改API吗。