繁体   English   中英

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

[英]How to get DST offset with Joda Time

在我的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导致的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分钟的偏移量。

询问DateTimeZome关于DST

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

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

何时使用“本地”类

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

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

我通过使用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抵消?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM