Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8308546

LocalDateTime when 2068-12-31 / 2069-01-01 error on timestamp 3124137600000L

XMLWordPrintable

    • generic
    • generic

      A DESCRIPTION OF THE PROBLEM :
      3124137600000L is have past 36159 days from 1970-01-01
      1970-01-01 + 36159 days = 2068-12-31 00:00:00
      but LocalDateTime is 2069-01-01

      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      long timestamp = 3124137600000L;
      Instant instant = Instant.ofEpochMilli(timestamp);
      ZonedDateTime zonedDateTime = instant.atZone(ZoneId.systemDefault());
      LocalDate localDate = zonedDateTime.toLocalDate();
      long days = localDate.toEpochDay();
      // output 36159
      System.out.println(days);

      String dateTimeStr = zonedDateTime.format(DateTimeFormatter.ofPattern(YYYY_MM_DD_HH_MM_SS));
      target: 2068-12-31 00:00:00
      but JDK-DateTime output: 2069-01-01-01


      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      target: 2068-12-31 00:00:00
      but JDK-DateTime output: 2069-01-01
      ACTUAL -
      2069-01-01

      ---------- BEGIN SOURCE ----------
              long timestamp = 3124137600000L;
              Instant instant = Instant.ofEpochMilli(timestamp);
              LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneId.of("+0"));

              String dateTimeString = getDateTimeString(localDateTime);
              assertEquals("2069-01-01 00:00:00", dateTimeString);
      ---------- END SOURCE ----------

      FREQUENCY : always


            tongwan Andrew Wang
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: