在我的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分钟的偏移量。
答案 0 :(得分:1)
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
可能意味着一个{{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偏移?