2015-06-27 14 views
8

Für Java folgenden Code 8Java 8 mal api - Instant.now (Uhr) vs LocaldateTime.now (Uhr)

1. System.out.println(LocalDateTime.now(Clock.systemDefaultZone())); 
    2. System.out.println(Instant.now(Clock.systemDefaultZone())); 

Zeile 1 durch aktuellen Zeitoffsetdruck Addieren aber Zeile 2 Druck aktuelle Zeit ohne Zugabe Offset.

Ich überprüfte den Quellcode von beiden und fand, dass LocaDateTime.now(clock) Rückkehr clock.instant() Rückkehr Zeit durch Hinzufügen von Offset aber Instant.now(clock) nicht so.

Warum hat es so entworfen? Erwarten wir in beiden Fällen nicht dasselbe Ergebnis?

Antwort

6

UPDATE: Instant hat nichts mit UTC im Sinne der Zeitzone zu tun. Es bezieht sich nur als Zeitstandard auf UTC.

Der Hauptunterschied ist der Rückgabetyp. Sie haben unterschiedliche String-Repräsentationen, weil die Typen selbst sehr unterschiedliche Bedeutungen haben.

Sofort # jetzt (Uhr) gibt Instant zurück. Ein Instant ist "[a]n instantaneous point on the time-line".

LocalDate # jetzt (Uhr) gibt LocalDate zurück. A LocalTime ist "a description of the local time as seen on a wall clock".

Als Ergebnis Sofort # jetzt (Clock) und LOCALDATE # jetzt (Clock) bedeuten sehr unterschiedliche Dinge und haben natürlich unterschiedliche Ergebnisse. Das Wichtigste, was sie gemeinsam haben, ist ein Name. Methodennamen sind Staub. Siehe die Typen.

Auf einer festen Clock, beide Instant.now (Uhr) und LocalDate.now (Uhr) werden konstante Werte zurück. Der Punkt der Annahme Clock als Parameter ist in der Lage, Dinge wie die Referenzzeit oder die Uhrzeitauflösung zu steuern.

+0

Könnten Sie mir bitte sagen, was ist die Notwendigkeit, Clock als Parameter zu übergeben? – nantitv

+2

Clock ist als Parameter erlaubt, um Use Cases wie eine feste oder Offset-Uhr im Test oder verschiedene Auflösungen wie Sekunden oder Minuten zu erlauben. https://docs.oracle.com/javase/8/docs/api/java/time/Clock.html –

+0

@nantitv Ich habe meine Antwort umgeschrieben. Es war vorher ein bisschen vage. Beantwortet sie jetzt effektiv Ihre Frage? –