Issue
I have a script to get previous month for current date (script executed on 1st date monthly) the script return valid result for all other month except on January
I tried to reproduce the case with these script
import java.time.*;
class Main {
public static void main(String[] args) {
LocalDate today = LocalDate.of(2022, 1, 1);
LocalDate prevMonth = today.minusDays(1);
System.out.println("Date object " + prevMonth);
System.out.println("Date formatted " + prevMonth.format(DateTimeFormatter.ofPattern("YYYY-MM-dd")));
}
}
Output:
Date object 2021-12-31
Date formatted 2022-12-31
Environment
openjdk 11.0.11 2021-04-20
OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.18.04)
OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.18.04, mixed mode, sharing)
Where is the bug come from, or you have better idea ?
ps: I preffered LocalDate over Calendar
Solution
You really need to carefully read the docs.
Do not use Y.
Y means 'weekyear'. You really, really, really do not want this. It'll turn 2022 somewhere around jan 1st, but not on jan 1st (well, one it about 7 years or so, it manages to line up perfectly). There will be days in year X that have a weekyear of year (X+1), and there will be days in year Z that will have a weekyear of year (Z-1): After all, a week starts on monday, so 'weekyear' can't change except on mondays. Turns out Jan 1st? Not always a Monday.
You want u. y is always great, but y does silly things for years before the year 0. Aside from that, u and y are identical. In other words, u is just better, it's the one you should use.
You also do not want D.
D means day-of-year. You wanted day-of-month. That's the symbol d (lowercase).
Try "uuuu-MM-dd".
Answered By - rzwitserloot
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.