我正在研究一些警报功能,我正在使用 Joda 来计算每个警报时间的毫秒。我有一些实用方法,例如:
public static DateTime getNextDateTimeWithHourMinute(int hour, int minute) {
DateTime now = new DateTime();
DateTime then = now
.withHourOfDay(hour)
.withMinuteOfHour(minute)
.withSecondOfMinute(0)
.withMillisOfSecond(0);
return then.isBefore(now) ? then.plusDays(1) : then;
}
它为我计算了一些小时和分钟的下一次出现。问题是,例如,如果我们尝试获得 3 月 10 日凌晨 2:00,那么我们将获得
java.lang.IllegalArgumentException:由于时区偏移转换导致的非法瞬间:2013-03-10T07:00:00.000
我知道在这种情况下,时间根本不存在,但是有一种简单的方法可以确定在now
和之间发生一些过渡then
,然后自动进行更正。显然,更正取决于您的用例。就我而言,我希望它是这样,如果从现在到现在时钟回落,我会得到一个延迟一个小时的 DateTime 对象。换句话说,例如,如果用户将闹钟设置为凌晨 3 点,然后时钟在该时间附近向后移动,则闹钟将在时钟时间显示为凌晨 3 点(现在是一小时后)时触发。抱歉吐槽了,希望这个问题有点道理。