DateTimeFormatter
is not giving correct format for Dec 30 and 31 2018 as per following snippet.
final String DATE_FORMAT = "YYYYMM";
DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern(DATE_FORMAT);
LocalDateTime startDate = LocalDateTime.of(2018,12,29,5,0,0);
System.out.println(startDate.format(dateFormat));
//prints 201812
LocalDateTime startDate = LocalDateTime.of(2018,12,30,5,0,0);
System.out.println(startDate.format(dateFormat));
//prints 201912 <------ should be 201812
LocalDateTime startDate = LocalDateTime.of(2018,12,31,5,0,0);
System.out.println(startDate.format(dateFormat));
//prints 201912 <------ should be 201812
Is this the expected behavior or is there a bug with DateTimeFormatter?
This is expected behaviour. YYYY
stands for "week-based-year", which is not the same as calendar year (see JavaDoc)
You most probably want to use yyyy
, which means "year-of-era"
YYYY is week year, yyyy is year
So Change final String DATE_FORMAT = "YYYYMM";
ro final String DATE_FORMAT = "yyyyMM";
should give you the correct result. For more informations about the patterns see the javadoc of DateTimeFormatter.
The first week of 2019 starts at Dec 30 of 2018. See this link for more informations about the wee years
y
is for "year-of-era" while Y
is for week-based-year
Replace:
final String DATE_FORMAT = "YYYYMM";
to:
final String DATE_FORMAT = "yyyyMM";
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With