Instant în Java

Un moment exact pe axa timpului, în UTC, măsurat în secunde și nanosecunde de la 1 ianuarie 1970.

Sintaxă
import java.time.Instant;

static Instant now()
static Instant parse(CharSequence text)   // "2026-10-19T11:30:00Z"

Ce face Instant

Instant este cel mai simplu mod de a reține „când s-a întâmplat ceva”: un număr de secunde și nanosecunde de la 1970-01-01T00:00:00Z (epoca Unix). Nu are fus orar, lună sau zi a săptămânii; este același în orice țară.

Instant.now() citește ceasul sistemului. Se folosește pentru marcaje de timp în jurnale, în baze de date sau pentru a măsura cât durează o operație. toString() afișează momentul în UTC, cu litera Z la final: 2026-10-19T11:30:00Z.

Pentru a afișa un Instant ca oră românească îl transformi: instant.atZone(ZoneId.of("Europe/Bucharest")).

Ce returnează

Un Instant.

Exemple

Exemplul 1: Momentul curent și durata unei operații

Valorile diferă la fiecare rulare.

import java.time.Duration;
import java.time.Instant;

public class Main {
    public static void main(String[] args) {
        Instant start = Instant.now();
        long suma = 0;
        for (int i = 0; i < 50_000_000; i++) {
            suma += i;
        }
        Instant stop = Instant.now();
        System.out.println("Start: " + start);
        System.out.println("Suma: " + suma + ", a durat " + Duration.between(start, stop).toMillis() + " ms");
    }
}

Rezultat posibil (diferă la fiecare rulare)

Start: 2026-10-19T11:31:07.482915Z
Suma: 1249999975000000, a durat 23 ms

Exemplul 2: Un marcaj de timp afișat ca oră românească

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) {
        Instant comanda = Instant.parse("2026-10-19T11:30:00Z");
        ZonedDateTime laNoi = comanda.atZone(ZoneId.of("Europe/Bucharest"));
        System.out.println("În baza de date: " + comanda);
        System.out.println("Pentru client:   " + laNoi.toLocalDateTime());
        System.out.println("Peste o oră:     " + comanda.plusSeconds(3600));
    }
}

Rezultat

În baza de date: 2026-10-19T11:30:00Z
Pentru client:   2026-10-19T14:30
Peste o oră:     2026-10-19T12:30:00Z

Greșeli frecvente

  • Încerci instant.getYear() sau plus(1, ChronoUnit.MONTHS). Instant nu are calendar; convertește întâi cu atZone.
  • Afișezi un Instant direct utilizatorilor. Ora apare în UTC (cu 2-3 ore mai puțin decât în România).

Comenzi înrudite

  • Instant.ofEpochSecond: Transformă un timestamp Unix (secunde de la 1970) în Instant; toEpochMilli face drumul invers, în milisecunde.
  • Duration.between: Calculează timpul exact dintre două momente (ore, minute, secunde); negativ dacă sfârșitul e înaintea startului.
  • ZonedDateTime: Data și ora împreună cu fusul orar (Europe/Bucharest); indică un moment exact și știe de ora de vară.
  • ZoneId: Identifică un fus orar (Europe/Bucharest) cu regulile lui de oră de vară; of îl alege, systemDefault dă fusul sistemului.