下一个匹配即时
Next matching Instant
我是 java8 时间 API 的新手,所以请原谅我糟糕的表述。
我想要做的是弄清楚下一次(从时间戳开始)满足某个标准的时间,以及何时停止满足。
举个例子,假设我有一个毫秒时间戳,我想弄清楚下一个时间戳是什么,它也是给定时区的星期五。
我还需要弄清楚什么时候不再是星期五。作为开始可能例如。是 4:20 星期五下午(如果是那个时间的话)所以开始 + 单元的长度是不够的。
Obv 有很多肮脏的方法可以做到这一点,但我正在寻找一种优雅且 java8 式的解决方案。我面临的实际问题比这复杂一点,但我认为解决星期五的例子给了我足够的线索来继续前进。
首先,您可能想使用 ZonedDateTime
,因为 Instant
是自纪元以来的毫秒数,并不真正支持 "date" 或 "time" 或 "day of week".
"find date matching criteria" 没有真正的实用程序 - 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());
我是 java8 时间 API 的新手,所以请原谅我糟糕的表述。
我想要做的是弄清楚下一次(从时间戳开始)满足某个标准的时间,以及何时停止满足。
举个例子,假设我有一个毫秒时间戳,我想弄清楚下一个时间戳是什么,它也是给定时区的星期五。
我还需要弄清楚什么时候不再是星期五。作为开始可能例如。是 4:20 星期五下午(如果是那个时间的话)所以开始 + 单元的长度是不够的。
Obv 有很多肮脏的方法可以做到这一点,但我正在寻找一种优雅且 java8 式的解决方案。我面临的实际问题比这复杂一点,但我认为解决星期五的例子给了我足够的线索来继续前进。
首先,您可能想使用 ZonedDateTime
,因为 Instant
是自纪元以来的毫秒数,并不真正支持 "date" 或 "time" 或 "day of week".
"find date matching criteria" 没有真正的实用程序 - 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());