SimpleDateFormat 问题

Issue with SimpleDateFormat

我正在使用 SimpleDateFormat 处理日期格式。但是当我以提供的格式格式化我的日期时,年份值增加 1.The 条件会随着该值发生。为什么会这样?

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-YYYY");
System.out.println("dob - "+date); // Java date
System.out.println("formatted date - "+sdf.format(date));

输出如下:

dob - Sun Dec 28 00:00:00 IST 1975
formatted date - 28-12-1976

年份值增加 1。为什么会这样。

根据Oracle docs

大写 Y 表示星期年,您应该使用 yyyy 代替 YYYY

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-YYYY");改为

SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");

你应该使用 SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); 因为 y 表示年而 'Y' 表示周年。

以下是在 SimpleDateFormat 中使用的支持代码。

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

尝试使用 "yyyy" 而不是 "YYYY"。

查看更多信息: SimpleDateFormat producing wrong date time when parsing "YYYY-MM-dd HH:mm"

  • Y 表示 "Week year"
  • y 表示 "Calendar year"