Recuerda que en las ciencias informáticas un error casi siempre tiene diferentes soluciones, pero compartiremos la mejor y más óptimo.
Solución:
Básicamente tu el problema es que está utilizando un constructor SimpleDateFormat (patrón de cadena), donde javadoc dice:
Construye un SimpleDateFormat utilizando el patrón dado y los símbolos de formato de fecha predeterminados para el configuración regional predeterminada.
Y si intentas usar este código:
DateFormat osLocalizedDateFormat = new SimpleDateFormat("MMMM EEEE");
System.out.println(osLocalizedDateFormat.format(new Date()))
notará que imprime los títulos de mes y día de la semana según su ubicación.
La solución a tu problema es para anular la configuración regional de fecha predeterminada utilizando el constructor SimpleDateFormat(String pattern, Locale locale):
DateFormat dateFormat = new SimpleDateFormat(
"EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
dateFormat.parse("Tue Jul 13 00:00:00 CEST 2011");
System.out.println(dateFormat.format(new Date()));
Según sus comentarios, creo que su propiedad es en realidad del tipo d:fecha o d: fecha y hora. Si es así, la propiedad ya volverá de Alfresco como un objeto Date de Java. Entonces, todo lo que necesitas hacer es:
NodeRef risposta = childAssocRef.getChildRef();
Date dataRisposta = (Date)nodeService.getProperty(risposta, AlfrescoConstants.QN_DATA_RISPOSTA);
tl; dr
ZonedDateTime.parse( // Produce a `java.time.ZonedDateTime` object.
"Wed Jul 13 00:00:00 CEST 2011" , // Corrected `Tue` to `Wed`.
DateTimeFormatter.ofPattern( "EEE MMM d HH:mm:ss zzz uuuu" , Locale.US )
)
2011-07-13T00:00+02:00[Europe/Paris]
Datos incorrectos: Wed
contra Tue
tu ingresas string Tue Jul 13 00:00:00 CEST 2011
es inválido. El 13 de julio de 2011 fue miércoles, no un martes.
String input = "Wed Jul 13 00:00:00 CEST 2011" ; // Corrected `Tue` to `Wed`.
java.tiempo
El enfoque moderno utiliza las clases java.time en lugar de las antiguas y problemáticas clases heredadas de fecha y hora que se ven en otras respuestas.
Defina un patrón de formato para que coincida con su entrada string. Observe la Locale
que define el lenguaje humano que se utilizará para analizar el nombre del mes y el nombre del día de la semana.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM d HH:mm:ss zzz uuuu" , Locale.US );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
zdt.toString(): 2011-07-13T00:00+02:00[Europe/Paris]
Zona horaria
Su CEST
es una pseudo-zona, no una true zona horaria. Nunca use estos. No están estandarizados y ni siquiera son únicos (!).
Él ZonedDateTime
La clase hará un valiente esfuerzo por adivinar la intención detrás de una pseudo-zona de 3-4 caracteres. Su CEST
pasó a trabajar aquí, interpretado como Europe/Paris
zona horaria. Pero no puede confiar en que la conjetura sea 100% exitosa. En cambio, evitar tales pseudo-zonas por completo.
Especifique un nombre de zona horaria adecuado en el formato de continent/region
como America/Montreal
, Africa/Casablanca
o Pacific/Auckland
.
ZoneId z = ZoneId.of( "Europe/Paris" ); // https://time.is/Paris
LocalDate today = LocalDate.now( z ); // Current date varies around the globe by zone.
ISO 8601
Tu aportación stringEl formato de es terrible. Al serializar valores de fecha y hora como texto, use solo los formatos estándar ISO 8601.
Él ZonedDateTime
La clase amplía sabiamente el formato estándar agregando el nombre de la zona horaria entre corchetes, como se ve en los ejemplos anteriores.
Acerca de java.time
El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases reemplazan a las antiguas y problemáticas clases heredadas de fecha y hora, como java.util.Date
, Calendar
& 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.
¿Dónde obtener las clases java.time?
- Java SE 8, Java SE 9y después
- Incorporado.
- Parte de la API de Java estándar con una implementación integrada.
- Java 9 agrega algunas características y correcciones menores.
- Java SE 6 y Java SE 7
- Gran parte de la funcionalidad de java.time está adaptada a Java 6 y 7 en ThreeTen-Backport.
- Androide
- Versiones posteriores de implementaciones de paquetes de Android de las clases java.time (JSR 310).
- Para Android anterior, el TresDiezABP el proyecto se adapta ThreeTen-Backport (mencionado anteriormente). Ver Cómo usar ThreeTenABP….
Él ThreeTen-Extra proyecto extiende java.time con clases adicionales. Este proyecto es un campo de pruebas para posibles adiciones futuras a java.time. Puede encontrar algunas clases útiles aquí, como Interval
, YearWeek
, YearQuarter
y más.
Nos puedes añadir valor a nuestro contenido participando con tu veteranía en las notas.