Java Snippets

Frammenti di timestamp Unix in Java

Esempi Java per i secondi epoch attuali, i millisecondi, la conversione con Instant, la formattazione consapevole del fuso e le moderne API di java.time.

Current Unix timestamp (seconds)
import java.time.Instant;

Instant.now().getEpochSecond()
Current Unix timestamp (milliseconds)
System.currentTimeMillis()
// or
Instant.now().toEpochMilli()
Instant from timestamp
import java.time.Instant;

Instant.ofEpochSecond(1700000000)
Instant.ofEpochMilli(1700000000000L)
Formatted string (UTC)
import java.time.*;
import java.time.format.DateTimeFormatter;

Instant.ofEpochSecond(1700000000)
    .atZone(ZoneOffset.UTC)
    .format(DateTimeFormatter.ISO_DATE_TIME)
In a specific timezone
import java.time.*;

Instant.ofEpochSecond(1700000000)
    .atZone(ZoneId.of("America/New_York"))
    .toString()

Basi dei timestamp in Java

Il codice Java moderno dovrebbe preferire java.time.Instant per il lavoro sui timestamp. Instant.now().getEpochSecond() dà i secondi Unix e Instant.now().toEpochMilli() dà i millisecondi Unix.

Da millis Java a timestamp Unix

Il codice Java spesso inizia con System.currentTimeMillis() — un long di millisecondi epoch. Per un timestamp Unix standard in secondi, dividi per 1000. Per una data, costruisci un Instant. Usa le conversioni esplicite qui sotto invece di far passare il long attraverso API diverse che potrebbero aspettarsi una o l'altra unità.

  • long millis = System.currentTimeMillis(); // 13 digits, epoch ms
  • long secs = System.currentTimeMillis() / 1000L; // millis to Unix timestamp
  • Instant inst = Instant.ofEpochMilli(millis); // currentTimeMillis to date (Instant)
  • String iso = Instant.ofEpochMilli(millis).toString(); // ISO 8601 UTC
  • ZonedDateTime zdt = Instant.ofEpochMilli(millis).atZone(ZoneId.of("UTC"));
  • Usa System.nanoTime() solo per misurare il tempo trascorso — non è basato sull'epoca

Formattazione Java con fuso orario

Converti un Instant in un ZonedDateTime con ZoneId quando mostri l'ora locale. Mantieni archiviazione e confronti in Instant o UTC, e formatta solo al bordo dell'applicazione.

Note di produzione per Java

L'API java.time separa istanti, valori di calendario locali e visualizzazione con fuso. Usa Instant per il momento da memorizzare o confrontare. Usa ZonedDateTime solo dopo aver selezionato una ZoneId per un utente, tenant o report. Evita i vecchi Date e Calendar a meno che una libreria più datata non li richieda.

  • Usa Instant.now().getEpochSecond() per secondi Unix
  • Usa Instant.now().toEpochMilli() o System.currentTimeMillis() per millisecondi
  • Usa Instant.ofEpochSecond(seconds) quando ricevi timestamp Unix standard
  • Usa DateTimeFormatter.ISO_INSTANT per un output API UTC compatto

FAQ

Il nuovo codice dovrebbe usare Date o Instant?
Usa Instant per la memorizzazione e il confronto dei timestamp. Il vecchio Date può ancora comparire in librerie datate, ma java.time è più chiaro per secondi, millisecondi e formattazione consapevole del fuso.
Qual è la differenza tra Instant e ZonedDateTime?
Instant è il momento esatto in UTC. ZonedDateTime è quel momento mostrato con uno ZoneId, utile per date e report rivolti all'utente.
Come verifico i valori epoch in Java?
Stampa Instant.ofEpochSecond(seconds) o Instant.ofEpochMilli(milliseconds) prima di salvare un valore. L'output ISO dovrebbe corrispondere all'istante UTC atteso dal sistema ricevente.
Come converto i millis in un timestamp Unix in Java?
Dividi System.currentTimeMillis() per 1000L per un long di secondi Unix: long secs = System.currentTimeMillis() / 1000L. Usa Instant.ofEpochSecond(secs) per tornare a un Instant.
Come converto currentTimeMillis in una data in Java?
Avvolgilo in un Instant: Instant.ofEpochMilli(System.currentTimeMillis()). Per la visualizzazione, combinalo con uno ZoneId: ZonedDateTime.ofInstant(instant, ZoneId.of("UTC")) o qualsiasi altra zona IANA.