Come ottenere il momento attuale in formato ISO 8601 con data, ora e minuti?


323

Qual è il modo più elegante per ottenere una presentazione in formato ISO 8601 del momento attuale, UTC? Esso dovrebbe essere simile: 2010-10-12T08:50Z.

Esempio:

String iso8601 = DateFormat.getDateTimeInstance(DateFormat.ISO_8601).format(date);


5
@marcolopes Attenzione, l'uso di a private static SimpleDateFormatnon è thread-safe.
vegemite4me,

Possibile duplicato della conversione
Antonio,

Simile a questa altra domanda , ma quella si tronca al secondo intero mentre questa domanda si tronca al minuto intero.
Basil Bourque,

Risposte:


292

Utilizzare SimpleDateFormatper formattare qualsiasi Dateoggetto desiderato:

TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"); // Quoted "Z" to indicate UTC, no timezone offset
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());

L'uso di a new Date()come mostrato sopra formatterà l'ora corrente.


8
@Joachim Il lato negativo di questo approccio "standard" è che devo avere molte istanze "yyyy-MM-dd'T'HH:mmZ"nella mia applicazione, ogni volta che ho bisogno di una data formattata ISO-8601. Con JodaTime, come vedo, posso usare un formattatore predefinito ISODateTimeFormat, che fa questo lavoro per me ..
yegor256

8
@Joachim, Zè modello valido in SimpleDateFormat, piuttosto fare questo: yyyy-MM-dd'T'HH:mm'Z'.
Buhake Sindi,

33
-1 Questo ti dà la data / ora nel fuso orario corrente - non UTC. La risposta di Carlos include il codice UTC necessario.
Scott Rippey,

16
Ho appena corretto l'errore del fuso orario - poiché è la risposta accettata penso che sia stata la cosa giusta da fare.
CdA

2
La Z deve essere citata come "yyyy-MM-dd'T'HH: mm'Z '"
Kimball Robinson,

224

Per i sistemi in cui il fuso orario predefinito non è UTC:

TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());

L' SimpleDateFormatistanza può essere dichiarata come costante globale se necessario frequentemente, ma attenzione che questa classe non è thread-safe. Deve essere sincronizzato se vi si accede contemporaneamente da più thread.

EDIT: Preferirei Joda Time se facessi molte diverse manipolazioni di Time / Date ...
EDIT2: corretto: setTimeZonenon accetta una stringa (corretta da Paul)


9
Questo formato non è una costante in nessuna libreria incorporata?
Daniel Kaplan,

Esistono due pacchetti diversi per "DateFormat", ricordati di usare "import java.text.DateFormat"
oabarca,

3
Se si desidera il fuso orario corrente, utilizzare TimeZone tz = TimeZone.getDefault (); invece
oabarca,

Si dovrebbe non citare la 'Z' nel formato in quanto che lo rende logicamente insignificante. Se TimeZone è UTC come nell'esempio sopra, una Z non quotata comporterà solo una Z nell'output ... tuttavia se TimeZone non è UTC, la Z verrà comunque emessa come un valore letterale implicito UTC quando il tempo potrebbe non essere essere. Se un sistema che consuma legge la Z come UTC ma l'ora non è l'ora verrà spostata. Viceversa se un parser utilizza la Z citata senza impostare la TimeZone, analizzerà i tempi UTC come orari locali (spostando di nuovo). Questa citazione non è necessaria se la TZ è impostata ma è pericolosa se non lo è.
Matt Whipple,

@MattWhipple - ma se usi una Z non quotata il risultato sarà qualcosa di simile 2016-06-14T13:56+0000- la domanda è chiedere qualcosa di simile2016-06-14T13:56Z
user85421

184

Java 8 nativo

java.time lo rende semplice da Java 8. E sicuro per i thread.

ZonedDateTime.now( ZoneOffset.UTC ).format( DateTimeFormatter.ISO_INSTANT )

Risultato: 2015-04-14T11:07:36.639Z

Potresti essere tentato di usare un accendino Temporalcome Instanto LocalDateTime, ma mancano il supporto del formatter o i dati del fuso orario. ZonedDateTimeFunziona solo fuori dalla scatola.

Sintonizzando o concatenando le opzioni / operazioni di ZonedDateTime e DateTimeFormatter , puoi facilmente controllare il fuso orario e la precisione , fino a un certo punto:

ZonedDateTime.now( ZoneId.of( "Europe/Paris" ) )
             .truncatedTo( ChronoUnit.MINUTES )
             .format( DateTimeFormatter.ISO_DATE_TIME )

Risultato: 2015-04-14T11:07:00+01:00[Europe/Paris]

I requisiti raffinati, come la rimozione della parte dei secondi, devono comunque essere serviti da formati personalizzati o dal processo post personalizzato.

.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) // 2015-04-14T11:07:00
.format( DateTimeFormatter.ISO_LOCAL_DATE ) // 2015-04-14
.format( DateTimeFormatter.ISO_LOCAL_TIME ) // 11:07:00
.format( DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm" ) ) // 2015-04-14 11:07

Per Java 6 e 7, puoi considerare back-port di java.time come ThreeTen-Backport , che ha anche una porta Android . Entrambi sono più leggero di Joda, e ha imparato da Joda di esperienza - esp. considerando che java.time è stato progettato dall'autore di Joda.


9
Buona risposta. Notare la buona abitudine di specificare esplicitamente un fuso orario piuttosto che fare affidamento implicito sul fuso orario predefinito corrente della JVM. Se lo si desidera, è possibile specificare un fuso orario particolare , ad esempio ZoneId.of( "America/Montreal" ).
Basil Bourque,

1
Instant consente di formattarlo nel formato ISO 8601 semplicemente chiamando il metodo .toString ():return DateTimeFormatter.ISO_INSTANT.format(this);
VadymVL

Questo è meglio perché si evita il valore predefinito.
Christophe Roussy,

6
Avvertenza: la soluzione per Java 8 che utilizza ISO_INSTANT ha una stranezza fastidiosa. Quando i millisecondi risultano essere 0, non vengono inclusi nell'output. Ciò è consentito secondo lo standard ISO 8601 ma molte librerie e parser in altre lingue non sono così indulgenti. Se è necessario includere sempre gli zeri, utilizzare invece: DateTimeFormatter ISO_8601 = ofPattern ("yyyy-MM-dd'T'HH: mm: ss.SSSX"). WithZone (UTC);
Jurgen,

Dopo essere passato da Java 8 a 11, vedo DateTimeFormatter.ISO_INSTANTe DateTimeFormatter.ISO_DATE_TIMEutilizzo 6 cifre dopo i secondi, anziché 3, che non viene più rilevato da Spring @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME).
Daniel M

126

Java 8:

thisMoment = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mmX")
                              .withZone(ZoneOffset.UTC)
                              .format(Instant.now());

Pre Java 8:

thisMoment = String.format("%tFT%<tRZ",
                           Calendar.getInstance(TimeZone.getTimeZone("Z")));

Dai documenti :

'R'    Ora formattata per l'orologio a 24 ore come "% tH:% tM"
'F'    Data completa ISO 8601 formattata come "% tY-% tm-% td".


26
Bene, o includi una libreria di terze parti aggiuntiva come dipendenza dal tuo progetto (che potresti voler tenere aggiornato e spedire con la tua applicazione, ehi, è solo un extra di 3,2 megabyte) e lo fai DateTime dt = new DateTime(); DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); String str = fmt.print(dt);, oppure incapsulare return String.format("%tFT%<tRZ", new Date());in una classe e fai str = Iso8601Time.now(), dove mai ne hai bisogno. (Non è che il formato ISO cambierà.) Se risulta che hai bisogno di qualcosa di più della semplice data corrente in formato ISO, usa una lib.
aioobe,

2
Totalmente d'accordo con questo.
yegor256,

3
Nota che è possibile cambiare la risposta contrassegnata come accettata ;-)
aioobe,

8
%tFT%<tTZincluderà secondi; %tFT%<tTZ.%<tLincluderà millisecondi.
Patrick Linskey il

2
Una soluzione molto accurata, ormai dovrebbe essere la risposta accettata :)
AbdelHady,

94

A partire da Java 8 puoi semplicemente fare:

Instant.now().toString();

Dai java.time.Instantdocumenti:

adesso

public static Instant now()

Ottiene l'istante corrente dall'orologio di sistema.

Ciò interrogherà l' orologio UTC di sistema per ottenere l'istante corrente.

 


public String toString()

Una rappresentazione di stringa di questo istante usando la rappresentazione ISO-8601.

Il formato utilizzato è lo stesso di DateTimeFormatter.ISO_INSTANT.


11
Questa è la risposta giusta, ed è uno scandalo che non sia stato votato più in alto rispetto a tutti questi inventati SimpleDateFormats.
David Moles,

Sono contento di aver letto più risposte. Sono d'accordo, questa dovrebbe essere la risposta ora.
Xan-Kun Clark-Davis,

E poiché è toString, in molti casi non dovrai nemmeno chiamarlo esplicitamente.
kaya3,

1
L'avvertimento in un commento su una risposta precedente si applica anche qui: "Avvertenza: la soluzione per Java 8 che utilizza ISO_INSTANT ha una stranezza fastidiosa. Quando i millisecondi sono 0 non sono inclusi nell'output. Ciò è consentito secondo ISO 8601 standard ma molte librerie e parser in altre lingue non sono così indulgenti. "
Dave L.,

27

usa JodaTime

Il sistema di calendario ISO 8601 è l'implementazione predefinita in Joda-Time

Ecco il documento per JodaTime Formatter

Modificare:

Se non si desidera aggiungere o se non si vede il valore dell'aggiunta della libreria sopra, è possibile utilizzare solo nella SimpleDateFormatclasse integrata per formattare la data nel formato ISO richiesto

come suggerito da @ Joachim Sauer

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
String nowAsString = df.format(new Date());

3
E come produrrebbe una stringa formattata come mostrato nella domanda?
Joachim Sauer,

4
Direi di non aggiungere una dipendenza dalla libreria per qualcosa di così semplice (che può essere ottenuto con due righe di codice Java). (Certo, se i requisiti aumentano, è un'altra storia.)
aioobe,

1
@aioobe, se è appena usato in diverse parti dell'app, allora va bene per impostazione predefinita, nel resto caso jodatime è meglio.
Jigar Joshi,

5
@aioobe jodatime è migliore in ogni caso, perché ha ISODateTimeFormat- un formattatore predefinito di ISO-8601.
yegor256,

3
@ org.life.java: che sono rilevanti solo quando puoi passare correttamente all'ora Jode. Non li avrai, quando usi solo questa funzione del tempo Joda.
Joachim Sauer,

20

DateFormatUtils di Apache commons-lang3ha costanti utili, ad esempio:DateFormatUtils.ISO_DATETIME_FORMAT


3
Più precisamente, il momento attuale in UTC: DateFormatUtils.format(new Date(), "yyyy-MM-dd'T'HH:mm'Z'", TimeZone.getTimeZone("UTC"));momento attuale nel fuso orario predefinito: DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(new Date()); @ yegor256 grazie per DateFormatUtilsaverlo menzionato , avendo a bordo apache commons-lang vale la pena usare il formato data.
Babinik,

19

Se non vuoi includere Jodatime (bello come lo è)

javax.xml.bind.DatatypeConverter.printDateTime(
    Calendar.getInstance(TimeZone.getTimeZone("UTC"))
);

che restituisce una stringa di:

2012-07-10T16:02:48.440Z

che è leggermente diverso dalla richiesta originale ma è ancora ISO-8601.



10

Joda-Time

Aggiornamento: il progetto Joda-Time è ora in modalità manutenzione , con il team che consiglia la migrazione alle classi java.time . Per Java 6 e 7, vedere il progetto ThreeTen-Backport , ulteriormente adattato per Android nel progetto ThreeTenABP .

Utilizzo della libreria Joda-Time ...

String output = new DateTime( DateTimeZone.UTC ).toString() ;

Questo è sicuro per i thread. Joda-Time crea nuovi oggetti immutabili anziché cambiare gli oggetti esistenti.

Se intendevi veramente richiedere un formato senza secondi, risolvendo i minuti, utilizza uno dei tanti altri formattatori incorporati in Joda-Time.

DateTime now = new DateTime( DateTimeZone.UTC ) ;
String output = ISODateTimeFormat.dateHourMinute.print( now ) ;

java.time

Per Java 8 e versioni successive, Joda-Time continua a funzionare. Ma il framework java.time integrato sostituisce Joda-Time. Quindi migra il tuo codice da Joda-Time a java.time non appena è conveniente.

Vedi la mia altra risposta per una soluzione moderna.


Informazioni su java.time

Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantare la vecchia fastidiosi legacy classi data-time come java.util.Date, Calendar, e SimpleDateFormat.

Il progetto Joda-Time , ora in modalità manutenzione , consiglia la migrazione alle classi java.time .

Per saperne di più, consulta il tutorial Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .

Puoi scambiare oggetti java.time direttamente con il tuo database. Utilizzare un driver JDBC conforme a JDBC 4.2 o successivo. Nessuna necessità di stringhe, nessuna necessità di java.sql.*classi.

Dove ottenere le classi java.time?

Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un banco di prova per possibili aggiunte future a java.time. Si possono trovare alcune classi utili, come per esempio Interval, YearWeek, YearQuartere altro .


7

Per Java versione 7

Puoi seguire la documentazione Oracle: http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

X: viene utilizzato per il fuso orario ISO 8601

TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());

System.out.println(nowAsISO);

DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
//nowAsISO = "2013-05-31T00:00:00Z";
Date finalResult = df1.parse(nowAsISO);

System.out.println(finalResult);

5

È possibile utilizzare SimpleDateFormat di Java con il modello seguente yyyy-MM-dd'T'HH:mm:ssXXXper ISO 8601.

Codice di esempio: (elenca tutti i fusi orari disponibili)

for (String timeZone : TimeZone.getAvailableIDs())
{
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
    dateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));
    String formatted = dateFormat.format(new Date());
    System.out.print(formatted);

    if (formatted.endsWith("Z"))
    {
        // These time zone's have offset of '0' from GMT.
        System.out.print("\t(" + timeZone + ")");
    }

    System.out.println();
}

Puoi usare:

TimeZone.getDefault ()

per il fuso orario predefinito vm. Più qui

Potresti notare l'ora della data per alcuni fusi orari che terminano con 'Z'. Questi fusi orari sono sfalsati '0'rispetto a GMT.

Maggiori informazioni possono essere trovate qui .


5

Credo che il modo più semplice sia passare prima all'istante e poi alla stringa come:

String d = new Date().toInstant().toString();

Che si tradurrà in:

2017-09-08T12:56:45.331Z


4
Se si desidera l'ora corrente, non è necessario passare attraverso un Dateoggetto vecchio stile . Fallo e basta Instant.now().toString(). Se hai ottenuto un Dateda un'API legacy, il tuo metodo è il migliore.
Ole VV,

Come Ole VV ha commentato, le classi data-ora vecchi problematici, come java.util.Date, java.util.Calendare java.text.SimpleDateFormatsono ora l'eredità , soppiantato dalle java.time classi integrate in Java 8 e versioni successive. Vedi Tutorial di Oracle .
Basil Bourque,

5

tl; dr

Alcune delle altre risposte sono corrette nel raccomandare le classi java.time , ma usano le lunghezze non necessarie per le tue esigenze specifiche.

Instant.now()                               // Capture the current moment in UTC with a resolution as fines nanoseconds but usually in microseconds or milliseconds.
       .truncatedTo( ChronoUnit.MINUTES )   // Lop off any seconds or fractional second, to get a value in whole minutes.
       .toString()                          // Generate a String in standard ISO 8601 format where a `T` separates the year-month-day from the hour-minute-second, and the `Z` on the end for “Zulu” means UTC.

2018-01-23T12: 34Z

Instant::toString

La jav.time.Instantclasse rappresenta un momento in UTC, sempre in UTC.

Instant instant = Instant.now() ;

instant.toString (): 2018-01-23T12: 34: 56.123456Z

L' Zestremità della stringa di esempio 2010-10-12T08:50Zè pronunciata "Zulu" e significa UTC .

Il formato desiderato risulta conforme allo standard ISO 8601 . Le classi java.time utilizzano questi formati standard per impostazione predefinita quando analizzano / generano stringhe. Quindi non è necessario specificare un modello di formattazione. Chiama Instant::toStringcome visto sopra.

Se si desidera specificamente minuti interi senza secondi o secondi frazionari, quindi troncare. Specificare un'unità di tempo tramite ChronoUnitclasse.

Instant instant = Instant.now().truncatedTo( ChronoUnit.MINUTES ) ;
String output = instant.toString();  // Generate a `String` object in standard ISO 8601 format.

Informazioni su java.time

Il framework java.time è integrato in Java 8 e versioni successive. Queste classi soppiantare la vecchia fastidiosi legacy classi data-time come java.util.Date, Calendar, e SimpleDateFormat.

Il progetto Joda-Time , ora in modalità manutenzione , consiglia la migrazione alle classi java.time .

Per saperne di più, consulta il tutorial Oracle . E cerca Stack Overflow per molti esempi e spiegazioni. La specifica è JSR 310 .

Puoi scambiare oggetti java.time direttamente con il tuo database. Utilizzare un driver JDBC conforme a JDBC 4.2 o successivo. Nessuna necessità di stringhe, nessuna necessità di java.sql.*classi.

Dove ottenere le classi java.time?

Il progetto ThreeTen-Extra estende java.time con classi aggiuntive. Questo progetto è un banco di prova per possibili aggiunte future a java.time. Si possono trovare alcune classi utili, come per esempio Interval, YearWeek, YearQuartere altro .


2

Ecco un'intera classe ottimizzata in modo che invocare "now ()" non faccia altro che deve fare.

public class Iso8601Util
{
    private static TimeZone tz = TimeZone.getTimeZone("UTC");
    private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");

    static
    {
        df.setTimeZone(tz);
    }

    public static String now()
    {
        return df.format(new Date());
    }
}

9
Renderlo statico può causare problemi in quanto SimpleDateFormat non è sicuro per i thread: "I formati di data non sono sincronizzati. Si consiglia di creare istanze di formato separate per ciascun thread. Se più thread accedono a un formato contemporaneamente, è necessario sincronizzarlo esternamente." docs.oracle.com/javase/7/docs/api/java/text/…
Juha Palomäki

2
Come menzionato da @Juha Palomäki, questo non è sicuro. Se si utilizza Java 8 o versione successiva, ThreadLocal.withInitial può risolverlo. Se si utilizza Java 7 o versioni precedenti, creare un nuovo ThreadLocal e fornire un valore iniziale sovrascrivendo ThreadLocal.initialValue
user393274

@ user393274 - se si utilizza Java 8 si dovrebbe usare Instant, DateTimeFormate l'altro thread moderna sostituzioni sicure

Sono un po 'perplesso da quale sia il problema con SimpleDateFormat che non è thread-safe. Se due thread eseguono l'inizializzatore statico allo stesso tempo, non vedo accadere nulla di peggio di quanto il costruttore SimpleDateFormat venga chiamato due volte ma solo un istante (l'ultimo alla fine) viene registrato come "df".
Gilbertpilz,

2
private static String getCurrentDateIso()
{
    // Returns the current date with the same format as Javascript's new Date().toJSON(), ISO 8601
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
    dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    return dateFormat.format(new Date());
}

1

Tuttavia, joda-time supporta solo il formato esteso: "2015-12-09T00: 22: 42.930Z" non la base: "20151209T002242.930Z" ... potremmo essere meglio testando un elenco di formati con java SimpleDateFormat.


1

L'ho fatto su Android usando Calendar e SimpleDateFormat. Il seguente metodo restituisce un calendario con il fuso orario "GMT" (Questo è il fuso orario universale). Quindi puoi utilizzare la classe Calendar per impostare l'ora tra fusi orari diversi, usando il metodo setTimeZone () della classe Calendar.

private static final String GMT = "GMT";
private static final String DATE_FORMAT_ISO = "yyyyMMdd'T'HHmmss";

public static Calendar isoToCalendar(final String inputDate) {
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(GMT));
    try {
        SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT_ISO, Locale.US);
        dateFormat.setTimeZone(TimeZone.getTimeZone(GMT));
        Date date = dateFormat.parse(inputDate);
        calendar.setTime(date);
    } catch (ParseException e) {
        Log.e("TAG",e.getMessage());
    }
    return calendar;
}

RICORDA: la classe Date non è a conoscenza dell'esistenza di TimeZone. Per questo motivo, se esegui il debug di una data, vedi sempre la data per il tuo fuso orario corrente.


1

Se ti preoccupi delle prestazioni, ho creato una libreria che supera le prestazioni del parser e del formatter Java standard manipolando le date in formato ISO8601. Le implementazioni di DatetimeProcessor sono thread-safe e possono essere memorizzate nella cache in una mappa simultanea o in campi statici.

<dependency>
  <groupId>com.axibase</groupId>
  <artifactId>date-processor</artifactId>
  <version>1.0.3</version>
</dependency>
import com.axibase.date.DatetimeProcessor;
import com.axibase.date.PatternResolver;
import org.junit.Before;
import org.junit.Test;

import java.time.Clock;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZoneOffset;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;

public class DateFormatTest {
    private Clock clock;

    @Before
    public void prepare() {
        clock = Clock.fixed(Instant.ofEpochMilli(1571285405300L), ZoneId.of("Europe/Berlin"));
    }

    @Test
    public void testIsoMillis(){
        final DatetimeProcessor formatter = PatternResolver.createNewFormatter("iso");
        assertThat(formatter.print(clock.millis(), ZoneOffset.UTC), is("2019-10-17T04:10:05.300Z"));
    }

    @Test
    public void testIsoMillisLocalZone(){
        final DatetimeProcessor formatter = PatternResolver.createNewFormatter("iso");
        assertThat(formatter.print(clock.millis(), clock.getZone()), is("2019-10-17T06:10:05.300+02:00"));
    }

    @Test
    public void testIsoMinutes(){
        final DatetimeProcessor formatter = PatternResolver.createNewFormatter("yyyy-MM-ddTHH:mmXXX");
        assertThat(formatter.print(clock.millis(), ZoneOffset.UTC), is("2019-10-17T04:10Z"));
    }
}

0

Avrebbero dovuto aggiungere un modo semplice per passare da Date a Instant e anche un metodo chiamato toISO8601, che è quello che molte persone stanno cercando. Come complemento ad altre risposte, da java.util.Data al formato ISO 8601:

Instant.ofEpochMilli(date.getTime()).toString();

Non è realmente visibile quando si utilizza il completamento automatico ma java.time.Instant.toString():

Una rappresentazione di stringa di questo istante usando ISO-8601


0
DateTimeFormatter.ISO_DATE_TIME
        .withZone(ZoneOffset.UTC)
        .format(yourDateObject.toInstant())

Mentre questo codice può rispondere alla domanda, fornendo un contesto aggiuntivo riguardo al perché e / o al modo in cui questo codice risponde alla domanda migliora il suo valore a lungo termine.
Vishal Chhodwani,

-2

Prova questo,

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ");
        String date=sdf.format (new Date() );

È per il formato ISO 8601


2
Questo userebbe le date nel fuso orario sbagliato, vedi la risposta di Carlos.
Stian Soiland-Reyes,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.