gpt4 book ai didi

java - Joda - 获得夏令时独立时间的正确方法

转载 作者:行者123 更新时间:2023-12-01 14:51:08 24 4
gpt4 key购买 nike

我正在开发一些闹钟功能,并使用 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: Illegal instant due to time zone offset transition: 2013-03-10T07:00:00.000

我知道在这种情况下时间根本不存在,但是有一种简单的方法可以确定 now 之间发生一些转换吗?和then然后自动进行修正。显然,更正取决于您的用例。就我而言,我希望这样,如果时钟从现在到那时之间倒退,我会得到延迟一小时的 DateTime 对象。换句话说,例如,如果用户将闹钟设置为凌晨 3 点,然后时钟在该时间附近向后移动,则闹钟将在时钟时间显示为凌晨 3 点(现在是一小时后)时触发。抱歉咆哮,希望这个问题有意义。

最佳答案

您可以在闹钟的日期/时区上撒谎。例如:

LocalDate localDate = new LocalDate().withMonthOfYear(3).withDayOfMonth(10);
LocalTime localTime = new LocalTime().withHourOfDay(2);
DateTime dateTime = localDate.toDateTime(localTime, DateTimeZone.UTC);
DateTime dt = new DateTime(DateTimeZone.UTC.getMillisKeepLocal(DateTimeZone.getDefault(), dateTime.getMillis()));

System.out.println(dateTime);
System.out.println(dt);

在我的例子中打印出:

2013-03-10T02:09:42.333Z
2013-03-10T03:09:42.333-07:00

(我住在华盛顿)

但是,我认为最好使用以下顺序的内容:

DateTime.now().toLocalDateTime().isBefore(new LocalDateTime(2013, 3, 10, 2, 0));

哪个在语义上更正确。

关于java - Joda - 获得夏令时独立时间的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14839438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com