Tu formato, YYYY-mm-dd'T'HH:MM:ss'Z'
no es correcto. Discutamos todo lo que está mal con este formato.
- Has usado
Y
en lugar dey
: El símboloY
se usa paraWeek year
mientrasy
se utiliza paraYear
. Compruebe Diferencia entre el año de ¿Era y semana basada en el año? para obtener más información al respecto. - Has usado
mm
por mes: El símbolo correcto para el mes esM
. - Has usado
MM
por minutos: El símbolo correcto para el minuto esm
. - Has incluido
Z
entre comillas simples: El símbolo,Z
se utiliza paraTime zone
mientras que'Z'
no es más que un carácter literal. Probablemente desee formatear el desplazamiento de la zona horaria de+00:00
comoZ
y para esto, de hecho deberías usarX
.
Entonces, el formato correcto es el siguiente:
yyyy-MM-dd'T'HH:mm:ssX
Una demostración con el formato sugerido:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
System.out.println(sdf.format(date));
}
}
Salida:
2021-01-14T08:13:01Z
Tenga en cuenta que la API de fecha y hora de java.util
y su API de formato, SimpleDateFormat
están desactualizados y son propensos a errores. Se recomienda dejar de usarlos por completo y cambiar a API moderna de fecha y hora
.
- Por cualquier motivo, si tiene que ceñirse a Java 6 o Java 7, puede usar Retroceso TresDiez que respalda la mayor parte de java.time funcionalidad para Java 6 y 7.
- Si está trabajando para un proyecto de Android y su nivel de API de Android aún no cumple con Java-8, verifique API de Java 8+ disponibles mediante eliminación de azúcar y Cómo usar ThreeTenABP en Android Project .
Use Date#toInstant
para convertir un java.util.Date
objeto (el tipo heredado) a java.time.Instant
(el tipo moderno). Instant
representa un punto instantáneo en la línea de tiempo y debería ser suficiente para la mayoría de sus operaciones JSON. El Instant#toString
devuelve la cadena de fecha y hora con el desplazamiento de zona horaria UTC que cumple con los estándares ISO-8601
.
Demostración:
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
Instant instant = date.toInstant();
// Print the value of instant#toString
System.out.println(instant);
OffsetDateTime odt = instant.atOffset(ZoneOffset.UTC);
System.out.println(odt);
// Custom format
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
System.out.println(dtf.format(odt));
}
}
Salida:
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35Z