java - 找出由两个 Long epoch 值表示的两个日期之间的差异

标签 java java-8 epoch java-time localdate

我的需求是我有一个 Long 值,它表示自纪元以来的毫秒值。我想找出那天和今天之间的天数差异。 我正在使用 Java8 的 DAYS.between(inputDate, currentDate)

对于 currentDate,我使用了 LocalDateTime currentDate = LocalDateTime.now(); 但我面临的问题是当我将 long 值转换为 java8 LocalDateTime 时。当我使用

LocalDate date = Instant.ofEpochMilli(1490372528)
  .atZone(ZoneId.systemDefault())
  .toLocalDate();

结果是 1970-01-18 而当我在 https://www.epochconverter.com/ 中输入相同的值时它给出 Fri, 24 Mar 2017 16:22:08 GMT

为什么会出现这种差异?如何有效地从长值中获取 java8 日期以在 DAYS.between() 中使用?

最佳答案

你必须做出决定。正如您在问题中所述,您的数字是“自纪元以来的毫秒值”,或者是“自 1970 年 1 月 1 日以来经过的秒数”,如链接网站上所述(和使用)。

如果它真的是“从纪元开始的毫秒数”,你可以使用

System.out.println(Instant.ofEpochMilli(1490372528).until(Instant.now(), ChronoUnit.DAYS));

打印天数,顺便说一下,这并不比 Java 8 之前的代码简单

System.out.println(TimeUnit.MILLISECONDS.toDays(System.currentTimeMillis()-1490372528));

如果您的数字实际上是“自纪元以来的秒数”,那么您的代码几乎不需要更改

System.out.println(Instant.ofEpochSecond(1490372528).until(Instant.now(),ChronoUnit.DAYS));

相当于

System.out.println(ChronoUnit.DAYS.between(Instant.ofEpochSecond(1490372528),Instant.now()));

正如您明确提到的DAYS.between。它只会委托(delegate)给上面使用的 until 方法。等效的 Java 8 之前的代码会稍微复杂一些

System.out.println(TimeUnit.MILLISECONDS.toDays(
                       System.currentTimeMillis()-TimeUnit.SECONDS.toMillis(1490372528)));

关于java - 找出由两个 Long epoch 值表示的两个日期之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43789213/

相关文章:

Java 线程安全 - 多个原子操作?

java - Java 中的互斥量和信号量

Java 多线程 - 有没有办法同步/锁定映射中的特定值以进行读取和写入?

C# 纪元日期时间转换

java - 它不会对total=i1+i2+i3+i4+i5给出的值求和; t17.setText(String.valueOf(total));在t17时总是显示0

java - 选择部门名称时填写JComboBox

java - Android 每 4 秒运行一个任务

java - 当变量是由于调用提供 lambda 的方法而被赋值时,如何在 lambda 中使用变量?

csv - 使用 GAWK 将时间戳记转换为 CSV 文件中的 Epoch

sql - 如何从 postgres 获取时间戳作为 Unix 纪元?