Java org.joda.time |日光节约时间(DST)和本地时区偏移
只是为了验证这一点:我有一个跛脚和脑死亡的方法来计算我当前位置的时区偏移。我想知道,当日光节约时间出现问题时,我是否需要调整它(目前我所在的位置有冬季时间,CET时区,所以很难验证)Java org.joda.time |日光节约时间(DST)和本地时区偏移,java,time,timezone,jodatime,dst,Java,Time,Timezone,Jodatime,Dst,只是为了验证这一点:我有一个跛脚和脑死亡的方法来计算我当前位置的时区偏移。我想知道,当日光节约时间出现问题时,我是否需要调整它(目前我所在的位置有冬季时间,CET时区,所以很难验证) 谢谢你的提示。是的,很好。为了验证它是否正确-而不是将DateTime对象中的空传递传递给DateTimeZone.getOffset-将DateTime设置为夏季的某个时候,当您知道DST生效时-您应该看到偏移值的变化。通常,Joda time会自行处理DST,因此您不必担心它。但是,我注意到您正在将null传递
谢谢你的提示。是的,很好。为了验证它是否正确-而不是将
DateTime
对象中的空传递传递给DateTimeZone.getOffset
-将DateTime设置为夏季的某个时候,当您知道DST生效时-您应该看到偏移值的变化。通常,Joda time会自行处理DST,因此您不必担心它。但是,我注意到您正在将null
传递给getOffset()。考虑到时区偏移取决于日期,您确实应该传递计算偏移的日期/时间,否则将得到错误的结果
正如我在之前的评论中提到的:请注意,某些时区的偏移量不是整小时数。例如,印度的时区是格林尼治标准时间+5:30,夏令时是一场噩梦。你当然不应该自己承担这项任务。让乔达来完成这项繁重的工作 请看类似的问题。这个类提供了一个方法 Java7中JodaTime2.3的示例源代码
/©2013巴西尔布尔克。此源代码可以由任何对此承担全部责任的人自由使用。
org.joda.time.DateTimeZone californiaTimeZone=org.joda.time.DateTimeZone.forID(“美国/洛杉矶”);
org.joda.time.DateTime now=new org.joda.time.DateTime(加州时区);
int millissecondOffsetLoadDTOutctoGetLocalTime=californiaTimeZone.getOffset(现在);
System.out.println(“毫秒OffsetLoadDtoutCtogetLocalTime:+MillisSecondOffsetLoadDtoutCtogetLocalTime”);
//请注意,强制转换为双倍以避免整数截断。时区偏移并不总是整小时。
System.out.println(“十进制小时偏移量:”+(双)毫秒OffsetLoaddOutctoGetLocalTime/1000d/60d/60d);
当在2013-11-20T01:03:56.464-08:00运行时
millissecondOffsetLoaddOutCtoGetLocalTime:-2880000
毫秒OffsetLoaddOutCtoGetLocalTime(小时):-8.0
重要偏移量的数字格式-8.0
不正确。必须是:
带冒号和两位数(用前导零填充)-08:00
带前导零-08
// The local time zone's offset
private int getLocalOffset() {
DateTimeZone defaultZone = DateTimeZone.getDefault();
return defaultZone.getOffset(null) / 1000 / 60 / 60;
}