2011-11-30 17 views
7

Mi primer intento fue:Analiza una fecha con la zona horaria "Etc/GMT"

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); 
Date date = formatter.parse(string); 

Se lanza ParseException, así que encontré este truco:

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); 
TimeZone timeZone = TimeZone.getTimeZone("Etc/GMT"); 
formatter.setTimeZone(timeZone); 
Date date = formatter.parse(string); 

no funcionó bien, y ahora estoy estancado Analiza sin problemas si solo cambio la zona horaria a "GMT".

edición: una cadena de ejemplo para analizar sería "2011-11-29 10:40:24 Etc/GMT"

Edit2: yo preferiría no para eliminar la información huso horario completo. Estoy codificando un servidor que recibe la fecha de un usuario externo, por lo que quizás otras fechas tengan otras zonas horarias. Para ser más precisos: esta fecha específica que recibo proviene del recibo del servidor de Apple después de realizar una compra en la aplicación en una aplicación de iPhone, pero también podría recibir fechas de otras fuentes.

+0

leave the small 'z' out. No considerará la zona horaria entonces. ¡Tu código funcionará bien! – HashimR

Respuesta

0

siguiente código está trabajando para mí

 

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
      sdf.setTimeZone(TimeZone.getTimeZone("Etc/GMT")); 
      try { System.out.println(sdf.parse("2011-09-02 10:26:35 Etc/GMT")); 
      } catch (ParseException e){ 
       e.printStackTrace(); 
      } 

+0

Maldición, por alguna razón acabo de obtener "java.text.ParseException: fecha indescargable:" 2011-09-02 10:26:35 Etc/GMT "". ¿Cómo puede ser esto? Ya he comprobado que getTimeZone() no devuelve null o algo así. – pgsandstrom

+0

SimpleDateFormat sdf = new SimpleDateFormat ("aaaa-MM-dd HH: mm: ss"); funcionará eliminar información de zona del formateador – Rupok

0

No funcionó para mí tampoco es que yo intentado fijar zona horaria del SimpleDateFormatter a "Etc/GMT" y luego formatea una nueva fecha aquí está la salida :

2011-11-30 10:46:32 GMT + 00: 00

Así Etc/GMT se traduce como GMT + 00: 00

Si realmente quiere meter a analizar "2011-09-02 10:26:35 Etc/GMT" luego siguiendo ayudará también sin considerar siquiera el cambio de zona horaria explícita:

java.text.SimpleDateFormat isoFormat = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss 'Etc/GMT'"); 
isoFormat.parse("2010-05-23 09:01:02 Etc/GMT"); 

funciona bien.

+0

Creo que el objetivo de la pregunta no era ignorar la zona horaria, sino tenerla en cuenta. Su código dará resultados incorrectos si la cadena contiene, p. Zona horaria "América/Los_Angeles". –

3

No sabe si esta pregunta sigue siendo relevante para usted, pero si se utiliza el tiempo Joda, esto funcionará:

DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss ZZZ").parseDateTime(s) 

Sin tiempo Joda el siguiente trabajo (más trabajo poco aunque):

String s = "2011-11-29 10:40:24 Etc/GMT"; 

// split the input in a date and a timezone part    
int lastSpaceIndex = s.lastIndexOf(' '); 
String dateString = s.substring(0, lastSpaceIndex); 
String timeZoneString = s.substring(lastSpaceIndex + 1); 

// convert the timezone to an actual TimeZone object 
// and feed that to the formatter 
TimeZone zone = TimeZone.getTimeZone(timeZoneString); 
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
formatter.setTimeZone(zone); 

// parse the timezoneless part 
Date date = formatter.parse(dateString); 
Cuestiones relacionadas