parsing date groovy timezone format

parsing - Reformar la fecha de cadena con TimeZone



date groovy (2)

Soy bastante nuevo en Groovy (pero ya me encanta). No soy nuevo en la codificación, pero hasta ahora no he tenido mucha experiencia.

¿Qué estoy haciendo? Estoy extrayendo cierta información de un archivo de Excel para crear un mensaje XML (SOAP) y reenviarlo a un servicio web. Todo funciona bien hasta el momento, excepto la conversión de fecha .

Estoy guardando la fecha de la cadena en una var

odate = ''Wed Oct 31 00:00:00 CET 2012''

Necesito reformatear esta Fecha en algo así como

"31/10/2012 10:09:00" (MM / dd / aaaa HH: mm: ss)

He intentado analizar la fecha como se menciona en otra pregunta, pero todo lo que obtengo es una excepción.

String odate = ''Wed Oct 31 00:00:00 CET 2012'' def parsedodate = new Date().parse(''E MMM dd H:m:s z yyyy'', odate) println parsedodate.format(''MM/dd/yyyy h:m:s'')

Excepción lanzada 31.10.2012 10:18:25 org.codehaus.groovy.runtime.StackTraceUtils sanitize

WARNUNG: Sanitizing stacktrace:

java.text.ParseException: fecha imposible de leer: "miércoles 31 de octubre a las 00:00:00 CET 2012"

Ahora, después de leer un poco y algunas rondas de prueba y error, descubrí que de alguna manera el método de análisis parece interpretar las fechas alemanas. Lo siguiente funciona después de cambiar manualmente la fecha de la cadena a un formato alemán (que es donde me encuentro).

String odate = ''Mi Okt 31 00:00:00 2012'' //Mi = Wednesday, Okt = October, removed timezone def parsedodate = new Date().parse(''E MMM dd H:m:s yyyy'', odate) // removed the z println parsedodate .format(''MM/dd/yyyy h:m:s'')

Sin embargo, necesito que el analizador acepte el formato de fecha en inglés. Qué hago mal)?


Tendrá que usar algo de Java para acceder a la instancia de SimpleDateFormat conocida de Locale.

SimpleDateFormat englishDateFormat = new SimpleDateFormat( englishPattern , Locale.ENGLISH); SimpleDateFormat germanDateFormat = new SimpleDateFormat( germanPattern , Locale.GERMAN); Date englishDate = englishDateFormat.parse( odate ); Date germanDate = germanDateFormat.parse( odate ); String englishOutput = englishDate .format( englishPattern ); String germanOutput = germanDate .format( germanPattern );


Toda la solución maravillosa para su problema sería:

import java.text.SimpleDateFormat odate="Wed Oct 31 00:00:00 CET 2012" englishPattern="E MMM dd H:m:s z yyyy" SimpleDateFormat englishDateFormat = new SimpleDateFormat( englishPattern , Locale.ENGLISH); //SimpleDateFormat germanDateFormat = new SimpleDateFormat( germanPattern , Locale.GERMAN); Date englishDate = englishDateFormat.parse( odate ); //Date germanDate = germanDateFormat.parse( odate ); String englishOutput = englishDate .format( englishPattern ); //String germanOutput = germanDate .format( germanPattern ); englishDate.format("MM/dd/yyyy hh:mm:ss")