simple parse example java date simpledateformat iso8601

parse - Patrón Java SimpleDateFormat para las fechas W3C XML con zona horaria



simpledateformat timezone (9)

¿Qué tal algo así como:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd''T''HH:mm:ssZ"){ public Date parse(String source,ParsePosition pos) { return super.parse(source.replaceFirst(":(?=[0-9]{2}$)",""),pos); } };

Esta pregunta ya tiene una respuesta aquí:

Estoy tratando de analizar una fecha de esquema XML del W3C como la siguiente

"2012-05-15T07:08:09+03:00"

que cumple con la norma ISO 8601 de la especificación WITC XML Schema dateTime .

En la fecha anterior, el identificador de zona horaria es "+03:00" , pero aparentemente no existe un patrón SimpleDateFormat para representarlo.

Si la zona horaria fuera "+0300" , entonces Z (mayúscula) sería aplicable y el patrón SimpleDateFormat sería

yyyy-MM-dd''T''HH:mm:ssZ

Del mismo modo, si la zona horaria fuera "GMT+03:00" , entonces z (minúscula) sería aplicable y el patrón SimpleDateFormat sería

yyyy-MM-dd''T''HH:mm:ssz

( ''Z'' mayúsculas también funciona, por cierto).

Entonces, ¿hay un patrón SimpleDateFormat o solución para representar la fecha anterior sin preprocesamiento de la cadena de fecha?


Con respecto a SimpleDateFormat, ya ha mencionado los patrones de formato que están disponibles y están definidos en: docs.oracle.com/javase/7/docs/api/java/text/…

Si desea hacer más con su Fecha, GregorianCalendar le brinda más opciones, por ejemplo:

TimeZone zone = TimeZone.getTimeZone(TimeZone.getTimeZone("GMT-8").getID()); GregorianCalendar calendar = new GregorianCalendar(zone); calendar.setTime(new Date(SomeDate));


Hmmm, ¿el formato de fecha parece el formato de tipo de datos de fecha y hora XML? Si se trata de formato de tipo de datos de fecha y hora XML, puede usar javax.xml.datatype.DatatypeFactory para crear XMLGregorianCalendar

DatatypeFactory .newInstance() .newXMLGregorianCalendar("2012-05-15T07:08:09+03:00");

La llamada anterior devuelve la instancia de XMLGregorianCalendar , puede usar el objeto para convertir a otros objetos Java datetime como GregorianCalendar .


La mejor manera es usar Joda''s

org.joda.time.format.ISODateTimeFormat

Saludos,


No estoy muy seguro de si esto funcionará para usted o no. Pero aquí el código que he intentado al convertir la fecha de una zona horaria a otra zona horaria. Puede que parte del código pueda ayudarlo.

public Date convertToUserTimezone(long dateToConvert, String timezoneOffset){ java.text.DateFormat format = SimpleDateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);/*new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");*/ // java.util.Calendar cal = Calendar.getInstance(new // SimpleTimeZone(0, "GMT+05:30")); TimeZone gmtTime = TimeZone.getTimeZone("GMT"+timezoneOffset); format.setTimeZone(gmtTime); java.util.Date date1 = new Date(format.format(new Date(dateToConvert))); return date1; }

Espero que esto te ayude. Aclamaciones. :)


No, no hay ninguna solución para hacer que SimpleDateFormat comprenda este formato sin preprocesar la cadena (por ejemplo, eliminando : de la cadena). (editar: excepto si está utilizando Java 7 o más reciente según lo señalado por assylias).

Parece que está intentando analizar cadenas en el formato XML estándar para fechas y horas (ISO 8601). Recomendaría usar la biblioteca Joda Time que tiene soporte para este formato .

Si no puede o no quiere utilizar Joda Time por alguna razón, puede usar las clases del paquete javax.xml.datatype para analizar y formatear las marcas de tiempo en este formato. Por ejemplo:

DatatypeFactory factory = DatatypeFactory.newInstance(); // Parses a string in ISO 8601 format to an XMLGregorianCalendar XMLGregorianCalendar xmlCal = factory.newXMLGregorianCalendar("2012-05-16T10:39:00+03:00"); // Convert it to a regular java.util.Calendar Calendar cal = xmlCal.toGregorianCalendar();


Puedes probar algo como:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd''T''HH:mm:ssz"); Date date = df.parse(stringDate.replaceAll("//+", "GMT+"));


Si usa Java 7+, este patrón debería funcionar ( X es para la zona horaria ISO 8601):

SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd''T''HH:mm:ssX");


utilice Apache commons DateUtils con posibles patrones. Ex:

private static final String[] DATE_FORMATS = new String[] { "yyyy-MM-dd''T''HH:mm:ss.SSSZ", "yyyy-MM-dd''T''HH:mm:ssz", "yyyy-MM-dd''T''HH:mm:ssZ", "yyyy-MM-ddz", "yyyy-MM-ddZ" }; public Date parse(String date) { Date parsedDate = null; try { parsedDate = DateUtils.parseDate(date, DATE_FORMATS); } catch (ParseException e) { logger.error("dates should be in valid format" + e); return null; } return parsedDate; }