下一个匹配即时

时间:2016-10-06 17:59:07

标签: java java-8 java-time

我是java8时间API的新手,所以请原谅这个糟糕的配方。

我想要做的是确定下次(从时间戳开始)何时达到某个标准,以及何时停止满足。

举一个例子,假设我有一个毫秒时间戳,我想弄清楚在给定时区也是星期五的下一个时间戳是什么。

我还需要弄清楚星期五什么时候停止。作为开始可能例如。星期五下午4点20分(如果那是时间)所以开始+单位长度是不够的。

Obv很多肮脏的方式,但我正在寻找一个优雅的java8-esque解决方案。我面临的实际问题比这更复杂,但我认为解决星期五的例子给了我足够的线索来推进。

1 个答案:

答案 0 :(得分:2)

首先,您可能想要使用ZonedDateTime,因为Instant是自纪元以来的毫秒数,并且不支持" date"等概念。或"时间"或者"星期几"。

找不到日期匹配标准"实际上并没有实用的功能。 - afaik,你自己必须自己做。

final Instant startVal = Instant.now();
final ZonedDateTime date = startVal.atZone(ZoneOffset.UTC); // or whatever
final int daysUntilFriday = (DayOfWeek.FRIDAY.getValue() - date.getDayOfWeek().getValue() + 7) % 7; // +7 to avoid a negative value
final ZonedDateTime startOfNextFriday = date.plusDays(daysUntilFriday).truncatedTo(ChronoUnit.DAYS);
final ZonedDateTime endOfNextFriday = ZonedDateTime.of(startOfNextFriday.toLocalDate(), LocalTime.MAX, startOfNextFriday.getZone());