如何在Java中创建不依赖于本地计算机系统时钟的时间戳?

时间:2019-03-28 19:38:13

标签: java logging

我试图将日志记录添加到应用程序中以进行协作,以便将用户的操作(如聊天消息和UI单击)记录到本地文本文件中。稍后,我将同步来自不同用户(使用不同计算机)的日志文本文件,以使日志按时间戳按时间顺序排列。我想知道如何记录时间戳以避免依赖系统时钟,因为这可能会导致日志文件同步不准确。

我当前正在使用java Instant类(导入java.time.Instant;),但是我不确定这是否可行。

String timestamp = Instant.now().toString();
try {
      BufferedWriter writer = new BufferedWriter(new FileWriter("actionLogs.txt", true));
      writer.write("\n" + timestamp + "\t" + username + "\t" + chatContents);
      writer.close();
} catch (IOException ex) {
      System.out.println("caught an IOException");
      ex.printStackTrace(System.out);
}

感谢您的建议!

2 个答案:

答案 0 :(得分:0)

瞬间是某个时间点;这意味着它没有绑定到任何本地系统时钟。 Instant类几乎是行之有效的方式。

通常以UTC(通用协调时间)表示。 UTC设计为所有观察者都相同。

当然,系统计时器用作时间源,因此严格来说,它取决于本地计算机上的系统时钟,除非您从时间服务器获取时间,但是对于日志记录,我不建议那个。

答案 1 :(得分:0)

好吧,将其绑定到特定时区,然后将其设置为timemillis,例如:

 String text = String.valueOf(LocalDateTime.now().atZone(ZoneOffset.UTC).toInstant().toEpochMilli());
 System.out.println(text);