10

私は本当にこれに頭を悩ませています。私はSimpleDateFormatしばらく問題なく s を使用してきましたが、現在、SimpleDateFormat を使用して日付を解析することは (時々だけ) 単純に間違っています。

具体的には:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = sdf.parse("2009-08-19 12:00:00");
System.out.print(date.toString());

文字列を出力しますWed Aug 19 00:00:00 EDT 2009。一体何?-常に間違った日付に解析することさえありません!


更新:それはそれを美しく修正しました。それは他のいくつかの場所でも悪用されていました。他の人のコードをデバッグするのが大好きです:)

4

4 に答える 4

24

HH00 から 23 までの時間を使用するために、「hh」ではなく形式を使用したいと思います。'hh' は 12 時間刻みの形式であるため、AM であると見なされます。

したがって、この

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse("2009-08-19 12:00:00");
System.out.print(date.toString());

印刷する必要があります

2009 年 8 月 19 日水曜日 12:00:00 EDT

于 2009-08-21T17:43:26.643 に答える
3

時間は、hh ではなく HH として指定する必要があります。http://java.sun.com/javase/6/docs/api/java/text/SimpleDateFormat.htmlの日付と時刻のパターンに関するセクションを確認してください。

于 2009-08-21T17:49:24.727 に答える
2

形式の表現ではなく、日付の toString() 表現を出力しています。また、時間表示を確認することもできます。H と h は意味が異なります。H は 24 時間制 (0 ~ 23)、h は 12 時間制 (1 ~ 12) です (それぞれ 1 ~ 24 および 0 ~ 11 ベースの時刻を表す k および K もあります)。

次のようなことをする必要があります:

//in reality obtain the date from elsewhere, e.g. new Date()
Date date = sdf.parse("2009-08-19 12:00:00"); 

//this format uses 12 hours for time
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//this format uses 24 hours for time
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

System.out.print(sdf.format(date));
System.out.print(sdf2.format(date));
于 2009-08-21T17:40:15.540 に答える
1
于 2016-08-20T18:44:28.477 に答える