如何将时间段划分为相等的间隔并找到当前时间段?
我需要为许多用户安排定期工作。此作业将以固定的速率(即时间间隔)运行。我想在该时间间隔内为每个用户统一分配作业的执行。例如,如果间隔为4天,我会使用一致的哈希函数,每个用户的标识符来同时计划作业,例如。每4天,在第3天。
间隔相对于所有用户都相同的源即时。给定这样的原点时刻,如 Instant#EPOCH
或其他一些常量值,我如何找到当前间隔的开始日期?
我可以做
Instant now = Instant.now();
Instant origin = Instant.EPOCH;
Duration interval = Duration.ofDays(4);
Duration duration = Duration.between(origin, now);
long sinceOrigin = duration.toMillis();
long millisPerInterval = interval.toMillis();
long intervalsSince = sinceOrigin / millisPerInterval;
Instant startNext = origin.plus(interval.multipliedBy(intervalsSince));
int cursor = distributionStrategy.distribute(hashCode, millisPerInterval);
然后,我可以使用 将作业安排在相对于当前间隔开始的位置。cursor
Instant
这里有很多数学,我不确定到处到处的毫秒转换是否支持实际日期。有没有一种更精确的方法来划分两个时刻之间的时间,并找到我们目前所处的一个(细分)?