¿Cómo obtener el momento actual en formato ISO 8601 con fecha, hora y minuto?


323

¿Cuál es la forma más elegante de obtener la presentación con formato ISO 8601 del momento actual, UTC? Debe quedar como: 2010-10-12T08:50Z.

Ejemplo:

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


55
@marcolopes Cuidado, el uso de a private static SimpleDateFormatno es seguro para subprocesos.
vegemite4me


Similar a esta otra pregunta , pero esa se trunca a un segundo entero mientras que esta pregunta se trunca a un minuto entero.
Basil Bourque

Respuestas:


292

Use SimpleDateFormatpara formatear cualquier Dateobjeto que desee:

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());

El uso de new Date()como se muestra arriba formateará la hora actual.


8
@Joachim El lado negativo de este enfoque "estándar" es que tengo que tener muchas instancias "yyyy-MM-dd'T'HH:mmZ"en mi aplicación, cada vez que necesito una fecha con formato ISO-8601. Con JodaTime, como veo, puedo usar un formateador predefinido ISODateTimeFormat, que hace este trabajo por mí ..
yegor256

8
@Joachim, Zes el patrón válido en SimpleDateFormat, en lugar hacer esto: yyyy-MM-dd'T'HH:mm'Z'.
Buhake Sindi

33
-1 Esto le da la fecha / hora en la zona horaria actual, no UTC. La respuesta de Carlos incluye el código UTC necesario.
Scott Rippey

16
Acabo de corregir el error de zona horaria, ya que es la respuesta aceptada, creo que fue lo correcto.
BoD

2
La Z necesita ser citada como "aaaa-MM-dd'T'HH: mm'Z '"
Kimball Robinson el

224

Para sistemas donde la zona horaria predeterminada no es 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());

La SimpleDateFormatinstancia se puede declarar como una constante global si se necesita con frecuencia, pero tenga en cuenta que esta clase no es segura para subprocesos. Debe sincronizarse si varios subprocesos acceden simultáneamente.

EDITAR: Preferiría Joda Time si hiciera muchas manipulaciones diferentes de hora / fecha ...
EDIT2: corregido: setTimeZoneno acepta una cadena (corregido por Paul)


99
¿Este formato no es una constante en ninguna parte de una biblioteca integrada?
Daniel Kaplan

Hay dos paquetes diferentes para 'DateFormat', recuerde usar 'import java.text.DateFormat'
oabarca

3
Si desea la zona horaria actual, use TimeZone tz = TimeZone.getDefault (); en cambio
oabarca

Usted debe no citar a la 'Z' en el formato, ya que hace que sea lógicamente insignificante. Si TimeZone es UTC como en el ejemplo anterior, una Z sin comillas solo dará como resultado una Z en la salida ... sin embargo, si TimeZone no es UTC, la Z aún se emitirá como una UTC literal, lo que implica que el tiempo no puede ser. Si un sistema consumidor lee la Z como UTC pero el tiempo no es, el tiempo cambiará. Por el contrario, si un analizador utiliza la Z entrecomillada sin establecer la zona horaria, analizará las horas UTC como horas locales (nuevamente cambiando). Esta cita no es necesaria si la TZ está configurada, pero es peligrosa si no lo está.
Matt Whipple

@MattWhipple, pero si usa una Z sin comillas, el resultado será algo así como 2016-06-14T13:56+0000: la pregunta es algo así como2016-06-14T13:56Z
user85421

184

Java 8 Native

java.time lo hace simple desde Java 8. Y es seguro para subprocesos.

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

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

Es posible que tenga la tentación de usar un encendedor Temporalcomo Instanto LocalDateTime, pero carece de soporte de formateador o datos de zona horaria. Solo ZonedDateTimefunciona fuera de la caja.

Al ajustar o encadenar las opciones / operaciones de ZonedDateTime y DateTimeFormatter , puede controlar fácilmente la zona horaria y la precisión , hasta cierto punto:

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

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

Los requisitos refinados, como la eliminación de la parte de segundos, aún deben cumplirse mediante formatos personalizados o postprocesos personalizados.

.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

Para Java 6 y 7, puede considerar puertos posteriores de java.time como ThreeTen-Backport , que también tiene un puerto Android . Ambos son más ligeros que Joda y han aprendido de la experiencia de Joda, especialmente. considerando que java.time está diseñado por el autor de Joda.


99
Buena respuesta. Observe el buen hábito de especificar explícitamente una zona horaria en lugar de depender implícitamente de la zona horaria predeterminada actual de la JVM. Puede especificar una zona horaria particular si lo desea, como ZoneId.of( "America/Montreal" ).
Basil Bourque

1
Instant permite formatearlo en formato ISO 8601 simplemente llamando al método .toString ():return DateTimeFormatter.ISO_INSTANT.format(this);
VadymVL

Esto es mejor porque evita el valor predeterminado.
Christophe Roussy el

66
Advertencia: La solución para Java 8 que usa ISO_INSTANT tiene una peculiaridad molesta. Cuando los milisegundos son 0, no se incluyen en la salida. Esto está permitido según el estándar ISO 8601, pero muchas bibliotecas y analizadores en otros idiomas no son tan indulgentes. Si es necesario incluir siempre los ceros, use esto en su lugar: DateTimeFormatter ISO_8601 = ofPattern ("aaaa-MM-dd'T'HH: mm: ss.SSSX"). WithZone (UTC);
jurgen

Después de cambiar de Java 8 a 11, veo DateTimeFormatter.ISO_INSTANTy DateTimeFormatter.ISO_DATE_TIMEuso 6 dígitos después de los segundos, en lugar de 3, que Spring ya no recoge @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME).
DanielM

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")));

De los documentos :

'R'    Hora formateada para el reloj de 24 horas como "% tH:% tM"
'F'    Fecha completa ISO 8601 formateada como "% tY-% tm-% td".


26
Bueno, ya sea que incluya una biblioteca de terceros adicional como una dependencia de su proyecto (que puede que desee mantener actualizado y enviar con su aplicación, oye, solo son 3.2 megabytes adicionales) y DateTime dt = new DateTime(); DateTimeFormatter fmt = ISODateTimeFormat.dateTime(); String str = fmt.print(dt);encapsular return String.format("%tFT%<tRZ", new Date());en una clase, y hazlo str = Iso8601Time.now(), donde sea que lo necesites. (No es que el formato ISO vaya a cambiar). Si resulta que necesita algo más que la fecha actual en formato ISO, use una lib.
aioobe

2
Totalmente de acuerdo con esto.
yegor256

3
Tenga en cuenta que es posible cambiar qué respuesta está marcada como aceptada ;-)
aioobe

8
%tFT%<tTZincluirá segundos; %tFT%<tTZ.%<tLincluirá milisegundos.
Patrick Linskey

2
Una solución muy ordenada, debería ser la respuesta aceptada por ahora :)
AbdelHady

94

A partir de Java 8, simplemente puede hacer:

Instant.now().toString();

De los java.time.Instantdocumentos:

ahora

public static Instant now()

Obtiene el instante actual del reloj del sistema.

Esto consultará el reloj UTC del sistema para obtener el instante actual.

 


public String toString()

Una representación de cadena de este instante utilizando la representación ISO-8601.

El formato utilizado es el mismo que DateTimeFormatter.ISO_INSTANT.


11
Esta es la respuesta correcta, y es un escándalo que no haya sido votado más alto sobre todos estos inventados SimpleDateFormats.
David Moles

Me alegro de haber leído más respuestas. Estoy de acuerdo, esta debería ser la respuesta ahora.
Xan-Kun Clark-Davis

Y como es así toString, en muchos casos ni siquiera necesitará llamarlo explícitamente.
kaya3

1
La advertencia en un comentario sobre una respuesta anterior también se aplica aquí: "Advertencia: la solución para Java 8 que usa ISO_INSTANT tiene una peculiaridad molesta. Cuando los milisegundos son 0, no están incluidos en la salida. Esto está permitido de acuerdo con la ISO 8601 estándar, pero muchas bibliotecas y analizadores en otros idiomas no son tan indulgentes ".
Dave L.

27

usar JodaTime

El sistema de calendario ISO 8601 es la implementación predeterminada dentro de Joda-Time

Aquí está el documento para JodaTime Formatter

Editar:

Si no desea agregar o si no ve el valor de agregar la biblioteca anterior, puede usar en la SimpleDateFormatclase incorporada para formatear la Fecha al formato ISO requerido

como lo sugirió @Joachim Sauer

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

3
¿Y cómo producirías una cadena formateada como se muestra en la pregunta?
Joachim Sauer

44
Yo diría que no agregue una dependencia de biblioteca para algo tan simple como esto (que se puede lograr con dos líneas de código java). (Claro, si los requisitos crecen, es otra historia.)
aioobe

1
@aioobe, si solo se usa en varias partes de la aplicación, entonces está bien ir por defecto, en caso de descanso jodatime es mejor.
Jigar Joshi

55
@aioobe jodatime es mejor en cualquier caso, porque tiene ISODateTimeFormatun formateador predefinido de ISO-8601.
yegor256

3
@ org.life.java: que solo son relevantes cuando puedes cambiar al tiempo de Jode correctamente. No los tendrá, cuando use solo esta función del tiempo de Joda.
Joachim Sauer

20

DateFormatUtils de Apache commons-lang3tienen constantes útiles, por ejemplo:DateFormatUtils.ISO_DATETIME_FORMAT


3
Más exactamente, el momento actual en GMT: DateFormatUtils.format(new Date(), "yyyy-MM-dd'T'HH:mm'Z'", TimeZone.getTimeZone("UTC"));momento actual de la zona horaria predeterminada: DateFormatUtils.ISO_DATETIME_TIME_ZONE_FORMAT.format(new Date()); @ yegor256 gracias por mencionar DateFormatUtils, teniendo a bordo apache commons-lang vale la pena usar el formato de fecha.
babinik

19

Si no quieres incluir Jodatime (tan bueno como es)

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

que devuelve una cadena de:

2012-07-10T16:02:48.440Z

que es ligeramente diferente a la solicitud original pero sigue siendo ISO-8601.



10

Joda-Time

Actualización: El proyecto Joda-Time ahora está en modo de mantenimiento , y el equipo aconseja migrar a las clases java.time . Para Java 6 y 7, consulte el proyecto ThreeTen-Backport , más adaptado para Android en el proyecto ThreeTenABP .

Usando la biblioteca Joda-Time ...

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

Esto es seguro para subprocesos. Joda-Time crea nuevos objetos inmutables en lugar de cambiar los objetos existentes.

Si realmente pretendía solicitar un formato sin segundos, resolviendo en minutos, utilice uno de los muchos otros formateadores integrados en Joda-Time.

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

java.time

Para Java 8 y versiones posteriores, Joda-Time continúa funcionando. Pero el marco java.time incorporado suplanta a Joda-Time. Así que migre su código de Joda-Time a java.time tan pronto como sea conveniente.

Vea mi otra respuesta para una solución moderna.


Sobre java.time

El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados clases de fecha y hora como java.util.Date, Calendar, y SimpleDateFormat.

El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .

Para obtener más información, consulte el Tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .

Puede intercambiar objetos java.time directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. No hay necesidad de cadenas, no hay necesidad de java.sql.*clases.

¿Dónde obtener las clases java.time?

El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Usted puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuarter, y más .


7

Para Java versión 7

Puede seguir la documentación de Oracle: http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

X: se utiliza para la zona horaria 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

Puede usar SimpleDateFormat de Java con el siguiente patrón yyyy-MM-dd'T'HH:mm:ssXXXpara ISO 8601.

Código de muestra: (enumera todas las zonas horarias disponibles)

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();
}

Podrías usar:

TimeZone.getDefault ()

para la zona horaria vm predeterminada. Más aquí

Es posible que observe la fecha y hora de algunas zonas horarias que terminan en 'Z'. Estas zonas horarias tienen una compensación de '0'GMT.

Más información se puede encontrar aquí .


5

Creo que la forma más fácil es ir primero al instante y luego encadenar como:

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

Lo que resultará en:

2017-09-08T12:56:45.331Z


44
Si desea la hora actual, no es necesario pasar por un Dateobjeto antiguo . Solo hazlo Instant.now().toString(). Si obtuvo una Datede una API heredada, su método es el mejor.
Ole VV

Como comentó Ole VV, las viejas clases problemáticas de fecha y hora como java.util.Date, java.util.Calendary java.text.SimpleDateFormatahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y posteriores. Ver Tutorial de Oracle .
Basil Bourque

5

tl; dr

Algunas de las otras respuestas son correctas al recomendar clases java.time , pero utilizan longitudes innecesarias para sus necesidades específicas.

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.Instantclase representa un momento en UTC, siempre en UTC.

Instant instant = Instant.now() ;

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

El Zfinal de la cadena de ejemplo 2010-10-12T08:50Zse pronuncia "Zulu" y significa UTC .

Su formato deseado cumple con el estándar ISO 8601 . Las clases java.time usan estos formatos estándar de forma predeterminada al analizar / generar cadenas. Por lo tanto, no es necesario especificar un patrón de formato. Simplemente llame Instant::toStringcomo se ve arriba.

Si desea específicamente minutos enteros sin segundos o segundos fraccionarios, trunca. Especifique una unidad de tiempo por ChronoUnitclase.

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

Sobre java.time

El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantar la vieja problemáticos heredados clases de fecha y hora como java.util.Date, Calendar, y SimpleDateFormat.

El proyecto Joda-Time , ahora en modo de mantenimiento , aconseja la migración a las clases java.time .

Para obtener más información, consulte el Tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .

Puede intercambiar objetos java.time directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. No hay necesidad de cadenas, no hay necesidad de java.sql.*clases.

¿Dónde obtener las clases java.time?

El proyecto ThreeTen-Extra extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Usted puede encontrar algunas clases útiles aquí, como Interval, YearWeek, YearQuarter, y más .


2

Aquí hay una clase completa optimizada para que invocar "now ()" no haga nada más de lo que tiene que hacer.

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());
    }
}

99
Hacerlo estático puede causar problemas, ya que SimpleDateFormat no es seguro para subprocesos: "Los formatos de fecha no están sincronizados. Se recomienda crear instancias de formato separadas para cada subproceso. Si varios subprocesos acceden a un formato simultáneamente, debe sincronizarse externamente". docs.oracle.com/javase/7/docs/api/java/text/…
Juha Palomäki

2
Como @Juha Palomäki mencionó, esto no es seguro. Si está utilizando Java 8 o superior, ThreadLocal.withInitial puede solucionarlo. Si está utilizando Java 7 o inferior, cree un nuevo ThreadLocal y proporcione un valor inicial anulando ThreadLocal.initialValue
user393274

@ user393274: si está utilizando Java 8, debería usarlo Instant, DateTimeFormaty los otros reemplazos modernos seguros para subprocesos

Estoy un poco desconcertado por cuál es el problema con SimpleDateFormat no es seguro para subprocesos. Si dos subprocesos ejecutan el inicializador estático al mismo tiempo, no veo que ocurra nada peor que el constructor SimpleDateFormat se llama dos veces, pero solo un instante (el último en terminar) se registra como "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

Aún así, joda-time solo admite el formato extendido: "2015-12-09T00: 22: 42.930Z" no el básico: "20151209T002242.930Z" ... podría ser mejor probar una lista de formatos con Java SimpleDateFormat.


1

Lo hice en Android usando Calendar y SimpleDateFormat. El siguiente método devuelve un calendario con la zona horaria "GMT" (esta es la zona horaria universal). Luego, puede usar la clase Calendar para establecer la hora entre diferentes zonas horarias, utilizando el método setTimeZone () de la clase 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;
}

RECUERDE: La clase Date no sabe sobre la existencia de TimeZone. Por este motivo, si depura una fecha, siempre verá la fecha de su zona horaria actual.


1

Si le importa el rendimiento, creé una biblioteca que supera el analizador y formateador Java estándar al manipular las fechas con formato ISO8601. Las implementaciones de DatetimeProcessor son seguras para subprocesos y se pueden almacenar en caché en un mapa concurrente o campos estáticos.

<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

Deberían haber agregado algún tipo de manera simple de pasar de Fecha a Instant y también un método llamado toISO8601, que es lo que mucha gente está buscando. Como complemento a otras respuestas, desde una fecha java.util.Date a ISO 8601:

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

No es realmente visible cuando se utiliza la finalización automática pero java.time.Instant.toString():

Una representación de cadena de este instante utilizando ISO-8601


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

Si bien este código puede responder a la pregunta, proporcionar un contexto adicional con respecto a por qué y / o cómo este código responde a la pregunta mejora su valor a largo plazo.
Vishal Chhodwani

-2

Prueba esto,

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

Es para el formato ISO 8601


2
Esto usaría fechas en la zona horaria incorrecta, vea la respuesta de Carlos.
Stian Soiland-Reyes
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.