11

なぜ「23:00PM」をSimpleDateFormat("hh:mm aa")午前11時に解析するのですか?

4

6 に答える 6

22

「23:00PM」は有効な文字列ではないため、例外が発生するはずですが、日付解析を処理する場合、Javaの日付/時刻機能はデフォルトで寛大です。

ロジックは、午後23:00は午後11:00の12時間後、つまり翌日の午前11:00であるというものです。また、「4月31日」が「5月1日」(4月30日の翌日)として解析されていることもわかります。

この動作を望まない場合は、DateFormat#setLenient(boolean)を使用してSimpleDateFormatのlenientプロパティをfalseに設定すると、無効な日付/時刻を渡すときに例外が発生します。

于 2009-07-20T18:01:04.570 に答える
17

24時間制を解析する場合は、フォーマットとして「HH:mmaa」が必要です。

public static void main(String[] args) throws ParseException {
    SimpleDateFormat df = new SimpleDateFormat("HH:mm aa");
    final Date date = df.parse("23:00 PM");
    System.out.println("date = " + df.format(date));
}

出力

date = 23:00 PM
于 2009-07-20T17:49:03.317 に答える
15

試しましたHH:mm aaか?

HHは24時間、hhは12時間です。

于 2009-07-20T17:49:45.123 に答える
4

javadocで指定されているフォーマットオプションは次のとおりです

H     Hour in day (0-23)    
k   Hour in day (1-24)  
K   Hour in am/pm (0-11)    
h   Hour in am/pm (1-12) 

「h」は1〜12時間であることに注意してください。1〜24を処理する場合は、「k」を試してください。0〜23の場合は、「H」を試してください。しかし、不可能なデータを入力している場合、有効な結果は期待できません。

于 2009-07-20T17:51:58.753 に答える
2

午後23:00は、翌日の午前11時と考えることができます。JavascriptとPHPはこのように機能しますが、Javaについて話すことはできません。

于 2009-07-20T17:49:51.223 に答える
1

私はそれが次のようなことをすると思います:

hours = hours % 12;

時間が適切な範囲内にあることを確認します。

于 2009-07-20T17:47:31.760 に答える