How to prove June 8, 2015 86401 seconds in Java 8 (new dates API)?

I am trying to prove that June 30, 2015 has 86401 seconds, use Java code as follows:

Instant i1 = Instant.ofEpochSecond(longestDay.toEpochSecond(ZoneOffset.UTC));
Instant i2 = Instant.ofEpochSecond(oneDayAfter.toEpochSecond(ZoneOffset.UTC));
long d = i1.until(i2, ChronoUnit.SECONDS);
System.out.println(d);
// 86400

I'll try again:

LocalDateTime longestDay = LocalDateTime.of(2015, Month.JUNE, 30, 0, 0, 0);
LocalDateTime oneDayAfter = LocalDateTime.of(2015, Month.JULY, 1, 0, 0, 0, 0);      
long p = ChronoUnit.SECONDS.between(longestDay, oneDayAfter);
System.out.println("p = " + String.valueOf(p));
// Result: p = 86400

still failed

I will try again:

ZonedDateTime startZdt = ZonedDateTime.of( 2015, 06, 30, 23, 59, 59, 00, ZoneOffset.UTC );
ZonedDateTime stopZdt = ZonedDateTime.of( 2015, 07, 01, 00, 00, 00, 00, ZoneOffset.UTC );
long elapsed = startZdt.until( stopZdt,ChronoUnit.SECONDS);
System.out.println("elapsed: " + elapsed);
// Result: elapsed: 1

I cannot prove that on June 30, 2015, Java code was 86401 seconds. Help me do it!

+4
source share
2 answers

In Java, every day has the same number of seconds. In fact, most operating systems do not support leap seconds, but treat them as a drift. When you install on UTC, you actually installGMT+0

+3
source

Short answer:

. java.time (JSR-310), .

:

  • ​​, JDK . : Oracle JDK.
  • , Instant, UTC-SLS ( ). UTC-SLS 86400 , . UTC-SLS, 86401 . : UTC-SLS!= UTC.
  • : - , UTC-SLS Java-8, . , JSR-310 , UTC-SLS, , , , . - UTC UTC-SLS, , Java-8. Instant , POSIX, . 86400 .

, , 86401 SI- 2015-06-30 - , ​​ (Time4J):

PlainDate ls = PlainDate.of(2015, 6, 30);
Moment start = ls.atStartOfDay().atUTC();
Moment end = ls.plus(1, CalendarUnit.DAYS).atStartOfDay().atUTC();
System.out.println(SI.SECONDS.between(start, end)); // 86401
+2

Source: https://habr.com/ru/post/1628409/


All Articles