为啥我不能在 java 中使用 SimpleDateFormat 得到正确的年份?

Posted

技术标签:

【中文标题】为啥我不能在 java 中使用 SimpleDateFormat 得到正确的年份?【英文标题】:Why don't I get the year right using SimpleDateFormat in java?为什么我不能在 java 中使用 SimpleDateFormat 得到正确的年份? 【发布时间】:2010-11-04 21:58:37 【问题描述】:

我试图解析mysql 格式的数据,我遇到了SimpleDateFormat。我可以得到正确的日期和月份,但是我得到了一个奇怪的结果:

date = 2009-06-22;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
Date d = sdf.parse(date);
System.println(date);
System.println(d.getDate());
System.println(d.getMonth());
System.println(d.getYear());

输出:

2009-06-22
22           OK
5            Hum... Ok, months go from 0 to 11
109          o_O WTF ?

我尝试将格式更改为YYYY-MM-dd(出错)和yy-MM-dd(什么也没做)。我在安卓上编程,不知道重要不。

目前,我使用拆分绕过它,但它很脏,并阻止我使用 i18n 功能。

【问题讨论】:

【参考方案1】:

年份是相对于 1900 年的。这是 Date 类的“特征”。尝试使用Calender

【讨论】:

好的,知道了。我会发布答案。【参考方案2】:

感谢 Aaron,正确的版本:

Calendar c = Calendar.getInstance(); 
c.setTime(sdf.parse(date));
System.println(c.get(Calendar.YEAR));

【讨论】:

以上是关于为啥我不能在 java 中使用 SimpleDateFormat 得到正确的年份?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能使用 Ubuntu 编译我的 Java 应用程序?

为啥使用类变量的这段代码不能像在 Java 中那样工作? [复制]

为啥不能在 Java 中扩展注解?

Java 泛型与 C++ 模板有何不同?为啥我不能使用 int 作为参数?

为啥我们不能在(非静态)内部类(Java 16 之前)中使用静态方法?

在 Java 7 ConcurrentHashMap 中,为啥在写的时候需要段锁?为啥我们不能再次使用 Unsafe 来保持非阻塞?