0

我想以一种我认为相当简单的方式生成时间戳——但数学让我无法理解!

我想生成满足以下条件的 2 个时间戳(自纪元以来以毫秒为单位):

  1. 他们是平等的。
  2. 它们在 10 秒内生成时相等。
  3. 它们会在几分钟后“过期”——比如最少 5 分钟,最多 10 分钟?(即时间戳未来日期)

用例如下:

  • 客户端 A 从服务器 A 请求当前时间 - 使用响应来计算它自己的时钟漂移。
  • 客户端 A 根据服务器 A 时间生成一个到期时间戳并发送到服务器 B(加密 - 所以我不能只是读取它)
  • 假设服务器 A 与服务器 B 的不同步时间少于 10 秒,服务器 B 生成具有相同到期时间的相同时间戳。

例子:

Time SvrA    Time SvrB    Client A    Server B

11:53.00     11:53.09     12:00.00    12:00.00
11:53.09     11:53.00     12:00.00    12:00.00
11:54.59     11:55.00     12:00.00    12:00.00
11:54.59     11:55.08     12:00.00    12:00.00 - could be 12:05 as long as they match
12:00.00     11:59.59     12:05.00    12:05.00 - could be 12:10 etc...

ETC....

理想情况下,我想要一些只适用于 Longs 的东西——并且避开 Java 日历

4

1 回答 1

0

为什么不直接使用毫秒时间戳并检查它们的差值的绝对值是否为 10 秒且最旧的不超过 10 分钟?

public static final long MAX_SKEW = 10 * 1000; // 10 seconds.
public static final long MAX_AGE = 10 * 60 * 1000; // 10 minutes.
public static boolean timestampsMatch(long t1, long t2) {
  if (Math.abs(t1 - t2) > MAX_SKEW) { return false; }
  final long oldest = Math.min(t1, t2);
  final long now = System.currentTimeMillis();
  if ((now - oldest) > MAX_AGE) { return false; }
  return true;
}
于 2013-02-07T00:20:43.963 回答