如何使用Joda Time获得DST偏移量

时间:2014-09-02 14:53:42

标签: java jodatime

在我的java程序中,我做了类似的事情

1)

LocalDateTime currentDateTime = new LocalDateTime();

LocalDateTime newDateTime = new LocalDateTime(currentDateTime);
newDateTime = newDateTime.plusDays(daysOffset);
newDateTime = newDateTime.plusHours(hoursOffset);
newDateTime = newDateTime.plusMinutes(minutesOffset);

稍后我会在代码中

2)。

boolean newDateTimeIsInWinter =
                    dateTimeZone.getOffset(newDateTime.toDateTime().getMillis()) == dateTimeZone.getStandardOffset(newDateTime.toDateTime().getMillis());

电话newDateTime.toDateTime()可能会产生java.lang.IllegalArgumentException: Illegal instant due to time zone offset transition

所以我想在1.)和2之间加上这样的东西。)

if (dateTimeZone.isLocalDateTimeGap(newDateTime))
{
    int dstOffsetMinutes = ???;
    newDateTime = newDateTime.plusMinutes(dstOffsetMinutes);
}

任何人都可以告诉我???的正确替代品并不像设置为60那么容易。例如,LHST时区只有30分钟的偏移量。

2 个答案:

答案 0 :(得分:1)

询问DateTimeZome关于DST

要确定某个特定时刻是否属于夏令时,请询问[DateTimeZone][1]对象。

boolean isStandardTime = DateTimeZone.forID( "America/Montreal" ).isStandardOffset( DateTime.now().getMillis() );

何时使用“本地”类

如果您关心时区,偏移和夏令时,请使用LocalDateTimeLocalDateLocalTime。这就是DateTime的用途。

如果您指的是的日期和/或时间而不是特定的地点或时区,请使用“本地”类。例如,如果你想说“圣诞节开始于2014-12-25T00:00:00.000”,那意味着在25日上午的任何特定地点的午夜。但LocalDateTime可能意味着一个{{1}对于巴黎,但在蒙特利尔有不同的DateTime(不同的时刻)。

答案 1 :(得分:0)

通过使用DateTime而不是LocalDateTime

解决了我的问题

1。)现在是

DateTime newDateTimeUTC = currentDateTime.toDateTime();
newDateTimeUTC = newDateTimeUTC.plusDays(daysOffset);
newDateTimeUTC = newDateTimeUTC.plusHours(hoursOffset);
newDateTimeUTC = newDateTimeUTC.plusMinutes(minutesOffset);

LocalDateTime newDateTime = newDateTimeUTC.toLocalDateTime();

2。)仍然是

boolean newDateTimeIsInWinter =
    dateTimeZone.getOffset(newDateTime.toDateTime().getMillis()) == dateTimeZone.getStandardOffset(newDateTime.toDateTime().getMillis());

不需要isLocalDateTimeGap或其他任何内容。

但这仍然不能解决原始问题如何使用Joda Time获得DST偏移?