java.time
La respuesta de MadProgrammer es correcta, especialmente el consejo sobre Joda-Time . El sucesor de Joda-Time ahora está integrado en Java 8 como el nuevo paquete java.time . Aquí hay un código de ejemplo en Java 8.
Cuando se trabaja con fecha y hora (en oposición a la fecha local), la zona horaria es crítica. El día del mes depende de la zona horaria. Por ejemplo, la zona horaria de India es +05:30
(cinco horas y media por delante de UTC), mientras que Francia está solo una hora por delante. Entonces, un momento en un nuevo día en India tiene una fecha, mientras que el mismo momento en Francia tiene la fecha de "ayer". Crear una salida de cadena que carece de información de zona horaria o desplazamiento es crear ambigüedad. Usted solicitó la salida AAAA-MM-DD, así que la proporcioné, pero no la recomiendo. En lugar de ISO_LOCAL_DATE
haber usado ISO_DATE
para obtener esta salida:2014-02-25+05:30
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zonedDateTime = ZonedDateTime.now( zoneId );
DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_LOCAL_DATE; // Caution: The "LOCAL" part means we are losing time zone information, creating ambiguity.
String output = formatterOutput.format( zonedDateTime );
Volcado a la consola ...
System.out.println( "zonedDateTime: " + zonedDateTime );
System.out.println( "output: " + output );
Cuando corres ...
zonedDateTime: 2014-02-25T14:22:20.919+05:30[Asia/Kolkata]
output: 2014-02-25
Joda-Time
Código similar usando la biblioteca Joda-Time , el precursor de java.time.
DateTimeZone zone = new DateTimeZone( "Asia/Kolkata" );
DateTime dateTime = DateTime.now( zone );
DateTimeFormatter formatter = ISODateTimeFormat.date();
String output = formatter.print( dateTime );
ISO 8601
Por cierto, ese formato de su cadena de entrada es un formato estándar, uno de los varios formatos prácticos de cadena de fecha y hora definidos por ISO 8601 .
Tanto Joda-Time como java.time utilizan formatos ISO 8601 de forma predeterminada al analizar y generar representaciones de cadenas de varios valores de fecha y hora.
Date
ayyyy-MM-dd
o analizar una cadena deyyyy-MM-dd
unDate
valor ?? Para formatear la fecha, simplemente useformat1.format(date)
, para analizarla, useformat1.parse(someStringValueInTheCorrectFormat)