Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java org.joda.time |日光节约时间(DST)和本地时区偏移_Java_Time_Timezone_Jodatime_Dst - Fatal编程技术网

Java org.joda.time |日光节约时间(DST)和本地时区偏移

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传递

只是为了验证这一点:我有一个跛脚和脑死亡的方法来计算我当前位置的时区偏移。我想知道,当日光节约时间出现问题时,我是否需要调整它(目前我所在的位置有冬季时间,CET时区,所以很难验证)


谢谢你的提示。

是的,很好。为了验证它是否正确-而不是将
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
    带前导零

不应使用以小时为单位的整数来表示本地分区偏移。许多地方实际上有半小时的偏移量(例如:印度)。你不能用int来表示它。joda time用毫秒来表示它是有原因的。这是个好主意。我差点忘了。
// The local time zone's offset
private  int getLocalOffset() {
    DateTimeZone defaultZone = DateTimeZone.getDefault();
    return defaultZone.getOffset(null) / 1000 / 60 / 60;
}