2010-11-30 25 views
10

2010-06-14 02: 21: 49 + 0400 o 2010-06-14 02: 21: 49-0400zona horaria local del dispositivo

hay una manera de convertir esta cadena a la fecha de acuerdo con el zona horaria máquina local con el formato 2010-06-14 02:21 AM

+1

posible duplicado de [fecha de visualización de acuerdo con la zona horaria de dispositivo] (http://stackoverflow.com/questions/4312220/display-date- según la zona horaria del dispositivo) –

+0

Acabo de responder esta pregunta recientemente. –

Respuesta

17

Agregando a lo @ org.life.java y @Erica dijo, aquí es lo que debe qué

String dateStr = "2010-06-14 02:21:49-0400"; 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ"); 
TimeZone tz = TimeZone.getDefault(); 
sdf.setTimeZone(tz); 
Date date = sdf.parse(dateStr); 

sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
String newDateStr = sdf.format(date); 

System.out.println(newDateStr); 

Entonces newDateStr será su nueva fecha de cadena con formato.


ACTUALIZACIÓN @xydev, el ejemplo que he dado que funciona, ver el código fuente completo a continuación:

/** 
* 
*/ 
package testcases; 

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
import java.util.TimeZone; 

/** 
* @author The Elite Gentleman 
* 
*/ 
public class Test { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     try { 
      String dateStr = "2010-06-14 02:21:49-0400"; 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ"); 
      TimeZone tz = TimeZone.getDefault(); 
      sdf.setTimeZone(tz); 
      Date date = sdf.parse(dateStr); 

      sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a"); 
      String newDateStr = sdf.format(date); 

      System.out.println(newDateStr); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

Salida: 2010-06-14 08:21:49 AM

+0

obtengo este valor para "Fecha de fecha" Lun Jun 14 11:51:49 GMT + 00: 00 2010 .... y la aplicación falla al llegar al paso " Cadena newDateStr = sdf.formato (fecha); " – xydev

+0

@xydev ... el mío funciona como un amuleto ... vea mi código completo ... –

+0

gracias ... lo tengo ... el error fue causado por este código \t \t \t // String dateStr =" 2010 -06 a 14 02: 21: 49 hasta 0400 "; // \t \t \t SimpleDateFormat sdf = new SimpleDateFormat (" aaaa-mM-dd HH: mm: ssZ "); // \t \t \t zona horaria tz = la zona horaria. getDefault(); // \t \t \t sdf.setTimeZone (tz); // \t \t \t fecha = "2010-06-14 02: 21: 49 hasta 0400"; // // \t \t \t try {// \t \t \t \t fechas sdf.parse = (fecha); // \t \t \t} catch (ParseException e) {// \t \t \t \t // bloque catch generada automáticamente TODO // \t \t \t \t e.printStackTrace(); // \t \t \t} – xydev

6

Usando SimpleDateFormat

String string1 = "2010-06-14 02:21:49-0400"; 
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ") 
sdf.setTimeZone(tz); 
Date date = sdf.parse(string1); 

Nota: no estoy seguro de la misma clase está disponible en Andriod.

+1

Buena respuesta. Sin embargo, probablemente necesite capitalizar el "mm" para el mes, de lo contrario obtendrá minutos allí. :) – Erica

+0

Android se basa en Java 1.5 por lo que la clase existe. – Pentium10

+0

@Erica gracias :), @ Pentium10 Gracias por la información –

1

Puede hacer todo tipo de formateo y localización de fechas usando la clase DateFormat. Hay una muy buena documentación completa al inicio de la página de la API aquí: http://download.oracle.com/javase/1.4.2/docs/api/java/text/DateFormat.html

La mayoría de los casos comunes pueden manejarse con el objeto SimpleDateFormat incorporado. Sus detalles están aquí: http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html

La cadena de patrón de salida SimpleDateFormat por el ejemplo que tiene encima sería:

yyyy-MM-dd hh:mm a 
+0

'a' es un marcador AM/PM, no se recupera Zona horaria. –

+0

@ The-Elite-Gentlemen, sí, ese era el formato de la cadena de salida que solicitó xydev; "2010-06-14 02:21 AM". :) – Erica

0

tener cuidado de que si está ejecutando en el emulador su zona horaria es siempre GMT. Acabo de pasar 2 horas tratando de entender por qué mi aplicación no me da el tiempo correcto (el que muestra mi computadora) hasta que me di cuenta de que es por el emulador.

Para comprobar que está ejecutando en el uso del emulador

if (Build.PRODUCT.contains("sdk")){ 
    // your code here for example if curtime has the emulator time 
    // since midnight in milliseconds then 
    curtime += 2 * 60 * 60 * 1000; // to add 2 hours from GMT 
} 
Cuestiones relacionadas