Come posso ottenere la data e l'ora correnti in Java?
Sto cercando qualcosa che è equivalente a DateTime.Now
da C #.
Come posso ottenere la data e l'ora correnti in Java?
Sto cercando qualcosa che è equivalente a DateTime.Now
da C #.
Risposte:
Basta costruire un nuovo Date
oggetto senza alcun argomento; questo assegnerà la data e l'ora correnti al nuovo oggetto.
import java.util.Date;
Date d = new Date();
Nelle parole di Javadocs per il costruttore a argomento zero :
Alloca un oggetto Date e lo inizializza in modo che rappresenti l'ora in cui è stato allocato , misurato al millisecondo più vicino.
Assicurati di usare java.util.Date
e non java.sql.Date
- quest'ultimo non ha un costruttore zero-arg e ha una semantica leggermente diversa che è l'argomento di una conversazione completamente diversa. :)
Le classi Java Date e Calendar sono considerate da molti mal progettate. Dovresti dare un'occhiata a Joda Time , una libreria comunemente usata al posto delle librerie di date integrate di Java.
L'equivalente di DateTime.Now
in Joda Time è:
DateTime dt = new DateTime();
Aggiornare
Come notato nei commenti, le ultime versioni di Joda Time hanno un DateTime.now()
metodo, quindi:
DateTime dt = DateTime.now();
Instant.now()
La classe java.util.Date è stata superata dal nuovo pacchetto java.time ( Tutorial ) in Java 8 e versioni successive. Le vecchie classi java.util.Date/.Calendar sono notoriamente problematiche, confuse e imperfette. Evitali.
ZonedDateTime
Ottieni il momento attuale in java.time.
ZonedDateTime now = ZonedDateTime.now();
A ZonedDateTime
incapsula:
Se non viene specificato alcun fuso orario, l'attuale fuso orario predefinito di JVM viene assegnato in modo silenzioso. Meglio specificare il fuso orario desiderato / previsto piuttosto che fare affidamento implicitamente sul valore predefinito.
ZoneId z = ZoneId.of( "Pacific/Auckland" );
ZonedDateTime zdt = ZonedDateTime.now( z );
In genere è meglio prendere l'abitudine di svolgere il proprio lavoro di back-end (logica aziendale, database, archiviazione, scambio di dati) tutto nel fuso orario UTC . Il codice sopra si basa implicitamente sul fuso orario predefinito corrente della JVM.
La Instant
classe rappresenta un momento nella sequenza temporale in UTC con una risoluzione di nanosecondi.
Instant instant = Instant.now();
La Instant
classe è una classe di base in java.time e può essere usata spesso nel tuo codice.
Quando hai bisogno di maggiore flessibilità nella formattazione, trasformalo in un OffsetDateTime
. Specificare un ZoneOffset
oggetto Per UTC utilizzare la costante utile per UTC .
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
È possibile adattarsi facilmente a un altro fuso orario per la presentazione all'utente. Utilizzare un nome di fuso orario corretto , mai i codici di 3-4 lettere come EST
o IST
.
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime nowMontreal = instant.atZone( z );
Genera una rappresentazione String di quel valore data-ora, localizzata.
String output = DateTimeFormatter
.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH )
.format ( nowMontreal );
Instant
Oppure, per rimanere in UTC, utilizzare Instant
. Un Instant
oggetto rappresenta un momento sulla linea temporale, alla risoluzione di nanosecondi, sempre in UTC. Ciò fornisce il blocco predefinito per una data-ora suddivisa in zone, insieme a un'assegnazione di fuso orario. Puoi pensarlo concettualmente in questo modo:
Puoi estrarre un Instant
da a ZonedDateTime
.
Instant instantNow = zdt.toInstant();
Puoi iniziare con un istante. Non è necessario specificare un fuso orario qui, come Instant
sempre in UTC.
Instant now = Instant.now();
Preferisco usare l'oggetto Calendar.
Calendar now = GregorianCalendar.getInstance()
Trovo molto più facile lavorare con. Puoi anche ottenere un oggetto Date dal Calendario.
http://java.sun.com/javase/6/docs/api/java/util/GregorianCalendar.html
Calendar.getInstance()
In Java 8 è:
ZonedDateTime dateTime = ZonedDateTime.now();
java.lang.System.currentTimeMillis();
restituirà il datetime dall'epoca
Se si crea un nuovo oggetto Date, per impostazione predefinita verrà impostato l'ora corrente:
import java.util.Date;
Date now = new Date();
Java ha sempre ricevuto un supporto inadeguato per i casi d'uso di data e ora. Ad esempio, le classi esistenti (come java.util.Date
e SimpleDateFormatter
) non sono thread-safe e possono causare problemi di concorrenza. Inoltre ci sono alcuni difetti nell'API. Ad esempio, gli anni a java.util.Date
partire dal 1900, i mesi iniziano a 1 e i giorni iniziano a 0, non molto intuitivi. Questi problemi hanno portato alla popolarità di librerie di data e ora di terze parti, come ad esempio Joda-Time
. Per indirizzare una nuova data e ora, l'API è progettata per Java SE 8.
LocalDateTime timePoint = LocalDateTime.now();
System.out.println(timePoint);
Come da documento :
Il metodo
now()
restituisce la data-ora corrente utilizzando l'orologio di sistema e il fuso orario predefinito, non null . Ottiene la data e l'ora correnti dall'orologio di sistema nel fuso orario predefinito. Ciò interrogherà l'orologio di sistema nel fuso orario predefinito per ottenere la data-ora corrente. L'uso di questo metodo impedirà la possibilità di utilizzare un orologio alternativo per i test poiché l'orologio è codificato.