SimpleDateFormat在解析时忽略月份

时间:2010-06-16 19:54:13

标签: java simpledateformat

以下代码给出了解析日期为“Wed Jan 13 00:00:00 EST 2010”      而不是“Wed June 13 00:00:00 EST 2010”。任何想法都非常赞赏。

    SimpleDateFormat sf = new SimpleDateFormat("yyyy-mm-dd'T'HH:mm:ss");

    String str = "2010-06-13T00:00:00";

    Date date = sf.parse(str);

    System.out.println(" Date " + date.toString());

4 个答案:

答案 0 :(得分:50)

尝试:

"yyyy-MM-dd'T'HH:mm:ss"

MM表示月份。 mm表示分钟。有关支持的日期和时间模式的详细信息,请参阅SimpleDateFormat的文档。

答案 1 :(得分:4)

问题是你使用'mm'作为月份而'mm'代表分钟。 以下是所有可用的日期格式,请阅读更多文档here

Symbol  Meaning                Kind         Example
D       day in year             Number        189
E       day of week             Text          E/EE/EEE:Tue, EEEE:Tuesday, EEEEE:T
F       day of week in month    Number        2 (2nd Wed in July)
G       era designator          Text          AD
H       hour in day (0-23)      Number        0
K       hour in am/pm (0-11)    Number        0
L       stand-alone month       Text          L:1 LL:01 LLL:Jan LLLL:January LLLLL:J
M       month in year           Text          M:1 MM:01 MMM:Jan MMMM:January MMMMM:J
S       fractional seconds      Number        978
W       week in month           Number        2
Z       time zone (RFC 822)     Time Zone     Z/ZZ/ZZZ:-0800 ZZZZ:GMT-08:00 ZZZZZ:-08:00
a       am/pm marker            Text          PM
c       stand-alone day of week Text          c/cc/ccc:Tue, cccc:Tuesday, ccccc:T
d       day in month            Number        10
h       hour in am/pm (1-12)    Number        12
k       hour in day (1-24)      Number        24
m       minute in hour          Number        30
s       second in minute        Number        55
w       week in year            Number        27
G       era designator          Text          AD
y       year                    Number        yy:10 y/yyy/yyyy:2010
z       time zone               Time Zone     z/zz/zzz:PST zzzz:Pacific Standard 

答案 2 :(得分:1)

现代回答:

    String str = "2010-06-13T00:00:00";
    LocalDateTime dateTime = LocalDateTime.parse(str);
    System.out.println("Date-time " + dateTime);

输出:

  

日期时间2010-06-13T00:00

我正在使用并推荐现代Java日期和时间API java.time。我们甚至不需要一个明确的格式化器来进行解析。这是因为您的字符串是ISO 8601格式,这是java.time类解析为默认值的国际标准。 java.time于2014年问世。

虽然在2010年提出这个问题时,SimpleDateFormat是我们解析日期和时间所用的,但是现在认为该类已经过时了,幸运的是,因为它也很麻烦。

如果您的字符串只包含日期而没有时间,请以完全相同的方式使用LocalDate类(a duplicate question中提到了这一点)。

    String dateStr = "2018-05-23";
    LocalDate date2 = LocalDate.parse(dateStr);
    System.out.println(date2);
  

2018年5月23日

链接: Oracle tutorial: Date Time解释如何使用java.time

答案 3 :(得分:0)

日期为06 07 2016的示例

*

您可以在这些格式之间使用逗号,句号,斜杠或连字符。

</p>