Java 找出由两个长历元值表示的两个日期之间的差异
我需要的是我有一个Long值,它表示自epoch以来的毫秒值。我想知道当天和当天的天数有什么不同。 我使用的是Java8的Java 找出由两个长历元值表示的两个日期之间的差异,java,java-8,epoch,java-time,localdate,Java,Java 8,Epoch,Java Time,Localdate,我需要的是我有一个Long值,它表示自epoch以来的毫秒值。我想知道当天和当天的天数有什么不同。 我使用的是Java8的DAYS.between(inputDate,currentDate) 对于currentDate,我使用了LocalDateTime currentDate=LocalDateTime.now() 但我面临的问题是,当我将long值转换为java8localdatetime时。当我使用 LocalDate date = Instant.ofEpochMilli(149037
DAYS.between(inputDate,currentDate)
对于currentDate,我使用了LocalDateTime currentDate=LocalDateTime.now()代码>
但我面临的问题是,当我将long值转换为java8localdatetime时。当我使用
LocalDate date = Instant.ofEpochMilli(1490372528)
.atZone(ZoneId.systemDefault())
.toLocalDate();
结果是1970-01-18
,当我在中输入相同的值时,它给出Fri,2017年3月24日16:22:08 GMT
为什么会有这种差异?如何有效地从一个长值中获取java8日期以天为单位使用。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
。它只会委托给,直到上面使用的方法。相当于Java 8之前的代码会稍微复杂一些
System.out.println(TimeUnit.MILLISECONDS.toDays(
System.currentTimeMillis()-TimeUnit.SECONDS.toMillis(1490372528)));
你必须做出决定。或者,您的数字是“自历元以来的毫秒值”,如您在问题中所述,或者是“自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
。它只会委托给,直到上面使用的方法。相当于Java 8之前的代码会稍微复杂一些
System.out.println(TimeUnit.MILLISECONDS.toDays(
System.currentTimeMillis()-TimeUnit.SECONDS.toMillis(1490372528)));
从您链接到的页面:Unix历元(或Unix时间或POSIX时间或Unix时间戳)是自1970年1月1日以来经过的秒数。顾名思义,ofEpochMilli需要毫秒。从链接到的页面使用:Unix历元(或Unix时间或POSIX时间或Unix时间戳)是自1970年1月1日以来经过的秒数。顾名思义,ofEpochMilli需要毫秒。用伟大的答案。还有,你觉得这个答案怎么样@gaurav很好,它完成了这项工作,但我会尽量避免这种手动计算,因为有像TimeUnit
或Duration
这样的类已经完成了这项工作,即对于两个Date
实例,您可以只使用System.out.println(Duration.between(d2.toInstant(),d1.toInstant())代码>。避免这种计算是有意义的。由于我使用的是Java1.7,所以我将使用TimeUnit类的方法。回答得很好。还有,你觉得这个答案怎么样@gaurav很好,它完成了这项工作,但我会尽量避免这种手动计算,因为有像TimeUnit
或Duration
这样的类已经完成了这项工作,即对于两个Date
实例,您可以只使用System.out.println(Duration.between(d2.toInstant(),d1.toInstant())代码>。避免这种计算是有意义的。作为,我使用Java1.7,我将使用TimeUnit类的方法。