有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java找出由两个长历元值表示的两个日期之间的差异

我需要的是,我有一个Long值,它代表自epoch以来的毫秒值。我想知道那天和今天的天数有什么不同。 我正在使用Java8的DAYS.between(inputDate, 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日期,以便在几天内使用。在()之间


共 (1) 个答案

  1. # 1 楼答案

    你必须做出决定。你的数字要么是你在问题中所说的“自历元以来的毫秒值”,要么是链接网站上所说(并使用)的“自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。它只会委托给上面使用的until方法。相当于Java 8之前的代码会稍微复杂一些

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