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

Week 53-problem with LocalDate and Weekfields

XMLWordPrintable

    • generic
    • generic

      FULL PRODUCT VERSION :
      C:\Users\Lappit>java -version
      java version "1.8.0_102"
      Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
      Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

      C:\Users\Lappit>

      ADDITIONAL OS VERSION INFORMATION :
      Microsoft Windows [Version 10.0.10586]

      A DESCRIPTION OF THE PROBLEM :
      It is actually a prolem in java.time (not java.util) ...

      When I try to get the week number (for Sweden) I get week number 0 instead of week number 53 for 1 January 2016. See below example:


      ======> Test code:

              LocalDate date = LocalDate.now();
              System.out.println("");
              System.out.println("");
              System.out.println("Date = " + date.toString());
              System.out.println("Year = " + date.get(WeekFields.ISO.weekBasedYear()));
              System.out.println("Week = " + date.get(WeekFields.ISO.weekOfYear()));
              System.out.println("Day = " + date.get(WeekFields.ISO.dayOfWeek()));

              date = LocalDate.of(2016, 01, 01);
              System.out.println("");
              System.out.println("");
              System.out.println("Date = " + date.toString());
              System.out.println("Year = " + date.get(WeekFields.ISO.weekBasedYear()));
              System.out.println("Week = " + date.get(WeekFields.ISO.weekOfYear()));
              System.out.println("Day = " + date.get(WeekFields.ISO.dayOfWeek()));


              date = LocalDate.of(2015, 12, 31);
              System.out.println("");
              System.out.println("");
              System.out.println("Date = " + date.toString());
              System.out.println("Year = " + date.get(WeekFields.ISO.weekBasedYear()));
              System.out.println("Week = " + date.get(WeekFields.ISO.weekOfYear()));
              System.out.println("Day = " + date.get(WeekFields.ISO.dayOfWeek()));




      ======> Result:

      Date = 2016-08-08
      Year = 2016
      Week = 32
      Day = 1


      Date = 2016-01-01
      Year = 2015
      Week = 0
      Day = 5


      Date = 2015-12-31
      Year = 2015
      Week = 53
      Day = 4




      STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
      I just ran the short code above.

      EXPECTED VERSUS ACTUAL BEHAVIOR :
      EXPECTED -
      I expected the result to be:

      Date = 2016-08-08
      Year = 2016
      Week = 32
      Day = 1


      Date = 2016-01-01
      Year = 2015
      Week = 53
      Day = 5


      Date = 2015-12-31
      Year = 2015
      Week = 53
      Day = 4

      ACTUAL -
      Receive the following result:

      Date = 2016-08-08
      Year = 2016
      Week = 32
      Day = 1


      Date = 2016-01-01
      Year = 2015
      Week = 0
      Day = 5


      Date = 2015-12-31
      Year = 2015
      Week = 53
      Day = 4


      ERROR MESSAGES/STACK TRACES THAT OCCUR :
      Receive no errors

      REPRODUCIBILITY :
      This bug can be reproduced always.

      ---------- BEGIN SOURCE ----------
      public class DateWeekTest {

          public static void main(String[] args) {

              LocalDate date = LocalDate.now();
              System.out.println("");
              System.out.println("");
              System.out.println("Date = " + date.toString());
              System.out.println("Year = " + date.get(WeekFields.ISO.weekBasedYear()));
              System.out.println("Week = " + date.get(WeekFields.ISO.weekOfYear()));
              System.out.println("Day = " + date.get(WeekFields.ISO.dayOfWeek()));

              date = LocalDate.of(2016, 01, 01);
              System.out.println("");
              System.out.println("");
              System.out.println("Date = " + date.toString());
              System.out.println("Year = " + date.get(WeekFields.ISO.weekBasedYear()));
              System.out.println("Week = " + date.get(WeekFields.ISO.weekOfYear()));
              System.out.println("Day = " + date.get(WeekFields.ISO.dayOfWeek()));


              date = LocalDate.of(2015, 12, 31);
              System.out.println("");
              System.out.println("");
              System.out.println("Date = " + date.toString());
              System.out.println("Year = " + date.get(WeekFields.ISO.weekBasedYear()));
              System.out.println("Week = " + date.get(WeekFields.ISO.weekOfYear()));
              System.out.println("Day = " + date.get(WeekFields.ISO.dayOfWeek()));


          }

      }

      ---------- END SOURCE ----------

      CUSTOMER SUBMITTED WORKAROUND :
      Just wanted to report the problem. I will do a minor workaround in my code, by checking the previous date in case of week 0.

            psonal Pallavi Sonal (Inactive)
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: