Is SimpleDateFormat in Java work incorrect or I did any mistake? See code sample [duplicate]
I use Java and compile this code using sdk 7. Console show:
input=2010/03/30
output=2010/12/28
public static void main(String[] args) {
SimpleDateFormat format = new SimpleDateFormat("YYYY/MM/dd");
String inputDateStr = "2010/03/30";
try {
Date date = format.parse(inputDateStr);
String result = format.format(date);
System.out.println("input=" + inputDateStr);
System.out.println("output=" + result);
} catch (ParseException e) {
e.printStackTrace();
}
}
Solution 1:
As for documentation https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
uppercase D
stands for the day number in a year
, if you want day number in a month
you should use lowercase d
.
The same for YYYY
and yyyy
:
Letter Date or Time Component Presentation Examples
G Era designator Text AD
y Year Year 1996; 96
Y Week year Year 2009; 09
M Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day name in week Text Tuesday; Tue
u Day number of week (1 = Monday, ..., 7 = Sunday) Number 1
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
X Time zone ISO 8601 time zone -08; -0800; -08:00
Solution 2:
yyyy/MM/dd
As the link shows, YYYY gives the week year, the first day of the next year could be in week year of this year, in week 52. Or such. DD is day in year, like 350.
The new date/time classes would be better to use.