webentwicklung-frage-antwort-db.com.de

Unterschied zwischen Java HH: mm und hh: mm bei SimpleDateFormat

Was ist der Unterschied zwischen den Formaten kk: mm, HH: mm und 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));

druckt:

24:00:00
00:00:00
05:30:00
41
user2527039

kk: (01-24) sieht aus wie 01, 02..24.

HH: (00-23) wird wie 00, 01..23 aussehen.

hh: (01-12 in AM/PM) sieht aus wie 01, 02..12.

der letzte Ausdruck (working2) ist also etwas komisch. Es sollte 12:00:00 (Bearbeiten: Wenn Sie die working2-Zeitzone und das Format einstellen, die (wie von kdagli ausgeführt wurde) nicht angegeben werden. 

46
kamjagin

Bitte schau hier

HH ist Stunde in einem Tag (von 0 bis 23)

hh sind Stunden im Format am/pm

kk ist Stunde pro Tag (von 1 bis 24)

mm ist Minute in Stunde

ss sind die Sekunden in einer Minute

16
peshkira

Eigentlich ist der letzte nicht komisch. Code setzt die Zeitzone für working anstelle von working2.

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

kk geht von 1 bis 24, HH von 0 bis 23 und hh von 1 bis 12 (AM/PM).

Wenn Sie diesen Fehler beheben, erhalten Sie Folgendes:

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

h/H = 12/24 Stunden .__ bedeutet, dass Sie das Format hh: mm = 12 Stunden und HH: mm = 24 Stunden schreiben

0
Rohit Dodiya

Verwenden Sie die integrierten lokalisierten Formate

Wenn dies dazu dient, einem Benutzer eine Uhrzeit zu zeigen, brauchen Sie sich in mindestens 19 von 20 Fällen nicht kk, HH oder hh zu kümmern. Ich schlage vor, dass Sie so etwas verwenden:

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

Der Punkt ist, dass es unterschiedliche Ausgabe in verschiedenen Standard-Gebietsschemas gibt. Zum Beispiel:

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

Die lokalisierten Formate wurden so gestaltet, dass sie den Erwartungen der verschiedenen Kulturen entsprechen. Sie bieten dem Benutzer also in der Regel eine bessere Benutzererfahrung, und Sie müssen keine Formatmusterzeichenfolge schreiben, die immer fehleranfällig ist.

Ich schlage außerdem vor, dass Sie SimpleDateFormat nicht verwenden. Diese Klasse ist bekanntermaßen lästig und zum Glück längst überholt. Stattdessen verwende ich Java.time, die moderne Java-API für Datum und Uhrzeit. Es ist viel schöner, damit zu arbeiten.

Vier Musterbuchstaben für die Stunde: H, h, k und K

Wenn Sie eine Zeichenfolge mit einem bestimmten Format analysieren müssen und auch sehr spezifische Formatierungsanforderungen haben, empfiehlt es sich, eine Formatmusterzeichenfolge zu verwenden. Es gibt vier verschiedene Musterbuchstaben, aus denen Sie stundenlang auswählen können (zitiert aus der Dokumentation):

  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

In der Praxis werden H und h verwendet. Soweit ich weiß, sind k und K nicht (sie wurden möglicherweise der Vollständigkeit halber eingeschlossen). Aber sehen wir sie alle in Aktion:

    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

Wenn Sie die führende Null nicht wünschen, geben Sie einfach einen Buchstaben an, der h anstelle von hh oder H statt HH ist. Bei der Analyse werden immer noch zwei Ziffern akzeptiert. Wenn eine zu druckende Zahl größer als 9 ist, werden immer noch zwei Ziffern gedruckt.

Links

0
Ole V.V.