JustSystems Corporation strong> div>
In der Frage in dieser Sitzung wurde ich gefragt: "Wie haben Sie diese 10 gefunden?" Ich wusste es von Anfang an und habe es bei dieser Sitzung überprüft, aber es ist schließlich nüchtern, dass ich normalerweise die Quelle der Java-Kern-API lese oder etwas ausprobiere. Ich dachte.
Das heutige Thema
Übrigens habe ich mich vor kurzem plötzlich für Folgendes interessiert, also habe ich es versucht.
Schreiben Sie viel H.
Wir haben Antworten von drei Personen erhalten. Die Meinungen waren geteilt. Ich dachte, es wäre der zweite.
Aber die Realität sah anders aus.
Bei der Implementierung der Kern-API sieht es so aus. (Auszug aus 8u131 Quelle)
java:DateTimeFormatterBuilder.java(LL.1793-1807)
case 'd':
case 'h':
case 'H':
case 'k':
case 'K':
case 'm':
case 's':
if (count == 1) {
appendValue(field);
} else if (count == 2) {
appendValue(field, count);
} else {
throw new IllegalArgumentException("Too many pattern letters: " + cur);
}
break;
Es werden nur 2 Zeichen akzeptiert, sodass 3 oder mehr Zeichen aus sind.
Also ist es okay, wenn es zwei Hs gibt? → In einigen Fällen tritt eine Ausnahme auf
Das nächste Problem ist also dieses.
Ich dachte, das wäre auch der zweite.
Aber die Realität sah anders aus.
Ich habe auch die Implementierung gesehen.
java:Instant.java(LL.594-606)
@Override
public long getLong(TemporalField field) {
if (field instanceof ChronoField) {
switch ((ChronoField) field) {
case NANO_OF_SECOND: return nanos;
case MICRO_OF_SECOND: return nanos / 1000;
case MILLI_OF_SECOND: return nanos / 1000_000;
case INSTANT_SECONDS: return seconds;
}
throw new UnsupportedTemporalTypeException("Unsupported field: " + field);
}
return field.getFrom(this);
}
Der "HOUR_OF_DAY", den Sie dieses Mal erhalten möchten, ist "ChronoField", also der obige
if (field instanceof ChronoField) {
Es ist in dieser if-Anweisung enthalten, um diese Bedingung zu erfüllen. Und da es in "switch" kein entsprechendes Feld gibt, bedeutet dies, dass es aus ist.
Mit anderen Worten, wenn Sie sich etwas Zeit nehmen möchten, müssen Sie eine Instanz einer Klasse haben, die HOUR_OF_DAY
unterstützt, wie z. B. LocalDateTime
. Dies war eine Lernerfahrung.
Blinddarm
Hier ist der Code, der für den Test verwendet wird. Da ich es für den persönlichen Gebrauch geschrieben habe, gibt es keinen Kommentar, und es ist peinlich, es auf eine weniger schöne Weise zu tun, z. B. zwischen den beiden Tests zu wechseln, ohne zu kommentieren.
FormatterTest.java
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
*
*/
public class FormatterTest {
/**
*
* @param arguments
*/
public static void main(String[] arguments) {
//System.out.println(DateTimeFormatter.ofPattern("HH").format(Instant.now()));
System.out.println(DateTimeFormatter.ofPattern("HHHH").format(LocalDateTime.now()));
}
}