gpt4 book ai didi

java - 您如何将时间段划分为相等的时间间隔并找到当前时间段?

转载 作者:IT老高 更新时间:2023-10-28 21:19:29 24 4
gpt4 key购买 nike

我需要为大量用户安排定期作业。此作业将以固定速率运行,即间隔。我想在该时间间隔内均匀地分配每个用户的作业执行。例如,如果间隔是 4 天,我会使用 consistent hashing function每个用户都有一个标识符以同时安排作业,例如。每 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 处。

这里有很多数学问题,我不确定在任何地方都转换为毫秒是否会支持实际日期。有没有更精确的方法来划分两个瞬间之间的时间并找到我们当前所处的那个(分割)?

最佳答案

如果你只想减少这里的数学,你可以使用余数来代替除法和乘法。

long millisSinceIntervalStart = sinceOrigin % millisPerInterval;
Instant startNext = now.minusMillis(millisSinceIntervalStart);

在这里,您不必计算自起源以来经过的间隔数。只需获取从 intervalStart 开始耗时,然后从当前时间中减去它。

此外,您的 startNext 似乎表示当前间隔的开始,而不是下一个间隔。对吗?

关于java - 您如何将时间段划分为相等的时间间隔并找到当前时间段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31822348/

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