web-dev-qa-db-ja.com

SimpleDateFormatのJava HH:mmとhh:mmの違い

Kk:mm、HH:mm、hh:mm形式の違いは何ですか?

    SimpleDateFormat broken = new SimpleDateFormat("kk:mm:ss");
    broken.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
    SimpleDateFormat working = new SimpleDateFormat("HH:mm:ss");
    working.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
    SimpleDateFormat working2 = new SimpleDateFormat("hh:mm:ss");
    working.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));

    System.out.println(broken.format(Epoch));
    System.out.println(working.format(Epoch));
    System.out.println(working2.format(Epoch));

プリント:

24:00:00
00:00:00
05:30:00
47
user2527039

kk:(01-24)01、02..24のようになります。

HH:(00-23)は00、01..23のようになります。

hh:(AM/PMの01-12)は01、02..12のようになります。

したがって、最後の印刷(working2)は少し奇妙です。 12:00:00(編集:working2タイムゾーンとフォーマットを設定していた場合、(kdagliが指摘したように)あなたはそうではありません)

51
kamjagin

ご覧ください こちら

HHは1時間(0から23まで)です。

hhはam/pm形式の時間です

kkは1時間(1から24まで)です。

mmは時間単位の分

ssは1秒の秒です

18
peshkira

実際、最後のものは奇妙ではありません。コードは、working2ではなくworkingのタイムゾーンを設定しています。

SimpleDateFormat working2 = new SimpleDateFormat("hh:mm:ss");working.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));

kkは1〜24、HHは0〜23、hhは1〜12(AM/PM)です。

このエラーを修正すると:

24:00:00
00:00:00
01:00:00
16
kdagli

組み込みのローカライズ形式を使用する

これがユーザーに時刻を表示するためのものである場合、20のうち少なくとも19では、kkHHまたはhhを気にする必要はありません。次のようなものを使用することをお勧めします。

    DateTimeFormatter defaultTimeFormatter
            = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
    System.out.format("%s: %s%n",
            Locale.getDefault(), LocalTime.MIN.format(defaultTimeFormatter));

ポイントは、異なるデフォルトロケールで異なる出力を提供することです。例えば:

en_SS: 12:00 AM
fr_BL: 00:00
ps_AF: 0:00
es_CO: 12:00 a.m.

ローカライズされた形式は、異なる文化の期待に適合するように設計されています。そのため、通常はユーザーに優れたエクスペリエンスを提供し、常にエラーが発生しやすいフォーマットパターン文字列を記述する手間を省きます。

さらに、SimpleDateFormatを使用しないことをお勧めします。そのクラスは厄介であり、幸いなことに時代遅れです。代わりに、最新のJava日時APIであるJava.timeを使用します。一緒に作業する方がずっといいです。

時間の4つのパターン文字:H、h、k、K

もちろん、指定された形式で文字列を解析する必要がある場合、および非常に特定の形式要件がある場合は、形式パターン文字列を使用することをお勧めします。実際には、時間から選択する4つの異なるパターン文字があります(ドキュメントから引用)。

  Symbol  Meaning                     Presentation      Examples
  ------  -------                     ------------      -------
   h       clock-hour-of-am-pm (1-12)  number            12
   K       hour-of-am-pm (0-11)        number            0
   k       clock-hour-of-day (1-24)    number            24
   H       hour-of-day (0-23)          number            0

実際には、Hhが使用されます。私の知る限り、kKは含まれていません(完全を期すために含まれている可能性があります)。しかし、それらのすべての動作を見てみましょう。

    DateTimeFormatter timeFormatter
            = DateTimeFormatter.ofPattern("hh:mm a  HH:mm  kk:mm  KK:mm a", Locale.ENGLISH);
    System.out.println(LocalTime.of(0, 0).format(timeFormatter));
    System.out.println(LocalTime.of(1, 15).format(timeFormatter));
    System.out.println(LocalTime.of(11, 25).format(timeFormatter));
    System.out.println(LocalTime.of(12, 35).format(timeFormatter));
    System.out.println(LocalTime.of(13, 40).format(timeFormatter));
12:00 AM  00:00  24:00  00:00 AM
01:15 AM  01:15  01:15  01:15 AM
11:25 AM  11:25  11:25  11:25 AM
12:35 PM  12:35  12:35  00:35 PM
01:40 PM  13:40  13:40  01:40 PM

先行ゼロが必要ない場合は、パターン文字を1つだけ指定します。つまり、hの代わりにhhまたはHの代わりにHHです。解析時に2桁を受け入れ、印刷される数値が9より大きい場合、2桁が印刷されます。

リンク集

2
Ole V.V.

h/H = 12/24時間は、hh:mm = 12時間形式とHH:mm = 24時間形式を書くことを意味します

1
Rohit Dodiya