为了以编程方式安排一天的工作(使用石英),我不得不弄出这样的代码:
Date.from(LocalDateTime.from(Instant.now()).plusDays(1).toInstant(ZoneOffset.ofHours(-3)))
难道没有一种方法可以使这段怪异的代码更干净,更易读吗?
我的目标是简单地选择这一刻并添加一天,而不用担心时区或在给定几天的持续时间中没有多少差异。
更具体地说,我需要一个java.util.Date来表示比创建日期多一天的时间。
答案 0 :(得分:3)
您选择的标题通常要求在Java中输入日期,但是您的问题和标签表明您可能对某些特定于Quartz的解决方案感兴趣,例如此类(假设您使用的是TriggerBuilder
) :
TriggerBuilder tb = ...; // initialize your tb
// Option 1
Trigger trigger = tb
.withSchedule(/* pick your flavor */)
.startAt(DateBuilder.futureDate(1, DateBuilder.IntervalUnit.DAY))
.build();
// Option 2
LocalDateTime now = LocalDateTime.now();
Trigger trigger2 = tb
.withSchedule(/* pick your flavor */)
.startAt(DateBuilder.tomorrowAt(now.getHour(), now.getMinute(), now.getSecond()))
.build();
有关更多信息,请检查DateBuilder API。
答案 1 :(得分:1)
我对两种形式都无偏好。这一个:
Date sameTimeTomorrow = Date.from(Instant.now().plus(Duration.ofDays(1)));
或者这个:
Date sameTimeTomorrow = Date.from(Instant.now().plus(1, ChronoUnit.DAYS));
但是请注意,这会增加24小时,而无需考虑夏季时间或其他异常情况。例如:在我的时区,夏季时间在10月27日至28日之间的夜晚结束。因此,如果我在10月27日中午12点进行上述操作,由于时间已更改,我将在10月28日在我所在的时区13日。如果我需要再次中午12点,我需要:
Date sameTimeTomorrow = Date.from(
ZonedDateTime.now(ZoneId.of("America/Sao_Paulo")).plusDays(1).toInstant());
请替换您的正确时区。