[英]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() );
如果您关心时区,偏移和夏令时,请不要使用LocalDateTime
, LocalDate
或LocalTime
。 这就是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.