Czym jest java.time.Instant

0

Pod tym postem Skąd bierzecie akutalną datę i jak to testujecie? wywiązała się dość ciekawa dyskusja z @Charles_Ray i @szprotki_w_oleju o reprezentacji czasu.
W skrócie ja twierdzę, że chociaż Instant jako taki nie posiada w sobie oznaczenia strefy czasowej, to już w dokumentacji jest określony jako "liczba sekund od 1970-01-01 00:00:00.000" https://docs.oracle.com/javase/8/docs/api/java/time/Instant.html

Przykład (akurat mam kotlina pod ręką):

    val warsawClock = Clock.system(ZoneId.of(ZoneId.SHORT_IDS["EST"]))
    val californiaClock = Clock.system(ZoneId.of(ZoneId.SHORT_IDS["PST"]))
    val utcClock = Clock.systemUTC()


    println("UTC instant: ${warsawClock.instant()} local instant: ${californiaClock.instant()} UTC clock ${utcClock.instant()}")

daje odpowiedź:
UTC instant: 2022-05-22T17:20:42.944125400Z local instant: 2022-05-22T17:20:42.944125400Z UTC clock 2022-05-22T17:20:42.944125400Z

Wniosek - Instant zawsze powinien być rozumiany jako liczba milisekund od początku epoki w strefie UTC.

Kluczowe miejsce z dokumentacji klasy Instant:

The epoch-seconds are measured from the standard Java epoch of 1970-01-01T00:00:00Z where instants after the epoch have positive values, and earlier instants have negative values.

"Z" na końcu to oznaczenie strefy czasowej UTC https://pl.wikipedia.org/wiki/ISO_8601

2

No bo instant to epoch milli de facto, z tego co wiem to te nano sekundy sa od tego żeby móc sprecyzowac ilośc upłyniętego czasu pomiędzy dwoma wydarzaniami.
Czyli: milisekundy są od tego żeby wiedziec jaka jest data , nano jest od tego żeby wiedziec ile czasu upłyneło od danej akcji w danej instancji aplikacji od innej akcji w tej samej instancji.

0

@scibi_92: Dość ważne jest to, że w przypadku Instant jedno z tych wydarzeń jest jasno zdefiniowane. Jeżeli mamy początek układu odniesienia i wiemy jaka jest odległość od niego, to wiemy też jednoznacznie gdzie jest ten wskazany punkt.
Na przykładzie:
0 oznacza dokładnie 1970-01-01 00:00:00.000 UTC
3600000 to dokładnie 0 oznacza dokładnie 1970-01-01 01:00:00.000 UTC ale też 0 oznacza dokładnie 1970-01-01 00:00:00.000 ECT (zakładając, że pamiętam skróty).

1 użytkowników online, w tym zalogowanych: 0, gości: 1