Come ottenere l’ora corrente in AAAA-MM-GG HH: MI: Sec. Secondo formato in Java?

Il codice qui sotto mi dà l’ora corrente. Ma non dice nulla di millisecondi.

public static String getCurrentTimeStamp() { SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//dd/MM/yyyy Date now = new Date(); String strDate = sdfDate.format(now); return strDate; } 

Ottengo la data nel formato 2009-09-22 16:47:08 (AAAA-MM-GG HH: MI: Sec) .

Ma voglio recuperare l’ora corrente nel formato 2009-09-22 16:47:08.128 ((AAAA-MM-GG HH: MI: Sec.Ms) – dove 128 indica il millisecondo.

SimpleTextFormat funzionerà SimpleTextFormat . Qui l’unità di tempo più bassa è la seconda, ma come ottengo anche il millisecondo?

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

Una fodera Java one

 public String getCurrentTimeStamp() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date()); } 

in stile JDK8

 public String getCurrentLocalDateTimeStamp() { return LocalDateTime.now() .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")); } 

Devi solo aggiungere il campo millisecondo nella stringa del formato data:

 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

Il documento API di SimpleDateFormat descrive la stringa di formattazione in dettaglio.

prova questo:-

http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

 DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); Date date = new Date(); System.out.println(dateFormat.format(date)); 

o

 DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Calendar cal = Calendar.getInstance(); System.out.println(dateFormat.format(cal.getTime())); 

tl; dr

 Instant.now() .toString() 

2016-05-06T23: 24: 25.694Z

 ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ).format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) .replace( "T" , " " ) 

2016-05-06 19: 24: 25.694

java.time

In Java 8 e versioni successive, abbiamo il framework java.time integrato in Java 8 e versioni successive. Queste nuove classi sostituiscono le fastidiose classi java.util.Date/.Calendar. Le nuove classi sono ispirate alla struttura di successo Joda-Time , intesa come suo successore, simile nel concetto ma ri-architettata. Definito da JSR 310 . Ampliato dal progetto ThreeTen-Extra . Vedi il tutorial .

Essere consapevoli del fatto che java.time è in grado di risoluzione nanosecondo (9 posizioni decimali in frazione di secondo), rispetto alla risoluzione in millisecondi (3 posizioni decimali) di entrambi java.util.Date e Joda-Time. Pertanto, quando si esegue la formattazione per visualizzare solo 3 posizioni decimali, è ansible hide i dati.

Se si desidera eliminare qualsiasi microsecondo o nanosecondo dai dati, troncare.

 Instant instant2 = instant.truncatedTo( ChronoUnit.MILLIS ) ; 

Le classi java.time utilizzano il formato ISO 8601 per impostazione predefinita durante l’analisi / generazione di stringhe. Una Z alla fine è l’abbreviazione di Zulu e significa UTC .

Un Instant rappresenta un momento sulla timeline in UTC con risoluzione fino a nanosecondi . Catturare il momento attuale in Java 8 è limitato a millisecondi , con una nuova implementazione in Java 9 che cattura fino a nanosecondi a seconda delle capacità dell’orologio hardware del tuo computer.

 Instant instant = Instant.now (); // Current date-time in UTC. String output = instant.toString (); 

2016-05-06T23: 24: 25.694Z

Sostituisci la T al centro con uno spazio, e la Z con niente, per ottenere l’output desiderato.

 String output = instant.toString ().replace ( "T" , " " ).replace( "Z" , "" ; // Replace 'T', delete 'Z'. I recommend leaving the `Z` or any other such [offset-from-UTC][7] or [time zone][7] indicator to make the meaning clear, but your choice of course. 

2016-05-06 23: 24: 25.694

Poiché non ti interessa includere l’offset o il fuso orario, crea una data “locale” non correlata a nessuna località specifica.

 String output = LocalDateTime.now ( ).toString ().replace ( "T", " " ); 

Joda-Time

La libreria Joda-Time di grande successo è stata l’ispirazione per il framework java.time. Consigliabile per migrare a java.time quando conveniente.

Il formato ISO 8601 include millisecondi ed è l’impostazione predefinita per la libreria Joda-Time 2.4.

 System.out.println( "Now: " + new DateTime ( DateTimeZone.UTC ) ); 

Quando corri …

 Now: 2013-11-26T20:25:12.014Z 

Inoltre, puoi chiedere il numero di millisecondi come numero, se necessario:

 int millisOfSecond = myDateTime.getMillisOfSecond (); 

Per completare le risposte di cui sopra, ecco un piccolo esempio funzionante di un programma che stampa l’ora e la data correnti, inclusi i millisecondi.

 import java.text.SimpleDateFormat; import java.util.Date; public class test { public static void main(String argv[]){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); Date now = new Date(); String strDate = sdf.format(now); System.out.println(strDate); } } 

Vorrei usare qualcosa del genere:

 String.format("%tF % 

dateTime variabile Il dateTime può essere qualsiasi valore di data e / o ora, vedere JavaDoc per Formatter .

Il modo più semplice era usare (prima di Java 8),

 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

Ma SimpleDateFormat non è thread-safe. Né java.util.Date . Ciò porterà a potenziali problemi di concorrenza per gli utenti. E ci sono molti problemi in quei progetti esistenti. Per superare questi ora in Java 8 abbiamo un pacchetto separato chiamato java.time . Questo documento Data e ora Java SE 8 ha una buona panoramica a riguardo.

Quindi in Java 8 qualcosa di simile farà il trucco (per formattare la data / ora corrente),

 LocalDateTime.now() .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")); 

E una cosa da notare è che è stato sviluppato con l’aiuto della popolare libreria di terze parti joda-time ,

Il progetto è stato guidato congiuntamente dall’autore di Joda-Time (Stephen Colebourne) e Oracle, sotto JSR 310, e apparirà nel nuovo pacchetto Java SE 8 java.time.

Ma ora il joda-time sta diventando deprecato e ha chiesto agli utenti di migrare a nuovo java.time .

Si noti che da Java SE 8 in poi, gli utenti sono invitati a migrare a java.time (JSR-310) – una parte fondamentale del JDK che sostituisce questo progetto

Comunque, detto questo,

Se hai un’istanza di Calendar puoi usare sotto per convertirla nel nuovo java.time ,

  Calendar calendar = Calendar.getInstance(); long longValue = calendar.getTimeInMillis(); LocalDateTime date = LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue), ZoneId.systemDefault()); String formattedString = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")); System.out.println(date.toString()); // 2018-03-06T15:56:53.634 System.out.println(formattedString); // 2018-03-06 15:56:53.634 

Se avessi un object Date,

  Date date = new Date(); long longValue2 = date.getTime(); LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(longValue2), ZoneId.systemDefault()); String formattedString = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS")); System.out.println(dateTime.toString()); // 2018-03-06T15:59:30.278 System.out.println(formattedString); // 2018-03-06 15:59:30.278 

Se hai appena avuto l’epoca millisecondi,

 LocalDateTime date = LocalDateTime.ofInstant(Instant.ofEpochMilli(epochLongValue), ZoneId.systemDefault()); 

Puoi semplicemente ottenerlo nel formato che desideri.

 String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date())); 

Il documento in Java 8 lo chiama frazione di secondo , mentre in Java 6 è stato chiamato millisecondo . Questo mi ha portato alla confusione