2010-11-30 12 views
10

2010-06-14 02: 21: 49 + 0400 lub 2010-06-14 02: 21: 49-0400Pierwsze lokalna strefa czasowa urządzenia

czy istnieje sposób przekonwertować ten ciąg do daty stosownie do lokalna strefa czasowa maszyna w formacie 2010-06-14 02:21

+1

możliwe duplikat [Datownik według strefy czasowej urządzenia] (http://stackoverflow.com/questions/4312220/display-date- zgodnie ze strefą czasową urządzenia) –

+0

Właśnie odpowiedziałem na to pytanie niedawno. –

Odpowiedz

17

Dodając do tego, co @ org.life.java i @Erica powiedział, oto co powinieneś do

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); 

Następnie nowy ciąg znaków sformatowany w formacie daty.


UPDATE @xydev, przykład dałem Ci działa, zobacz pełny kod źródłowy poniżej:

/** 
* 
*/ 
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(); 
     } 
    } 
} 

wyjściowa: 2010-06-14 08:21:49 AM

+0

Otrzymuję tę wartość dla "Data daty" Mon Cze 14 11:51:49 GMT + 00: 00 2010 .... i awarie aplikacji po osiągnięciu kroku " String newDateStr = sdf.format (data); " – xydev

+0

@xydev ... moje działa jak urok ... zobacz mój pełny kod ... –

+0

dzięki .. mam to ... błąd został spowodowany przez ten kod \t \t \t // String dateStr =" 2010 -06-14 02: 21: 49-0400 "; // \t \t \t SimpleDateFormat SDF = nowy SimpleDateFormat (" rrrr mM-dd HH: mM: SSZ "); // \t \t \t Strefa czasowa TZ = strefę czasową. getDefault(); // \t \t \t sdf.setTimeZone (tz) // \t \t \t data = "2010-06-14 02: 21: 49-0400"; // // \t \t \t try {// \t \t \t \t dat = sdf.parse (data); // \t \t \t} zaczep (ParseException e) { // \t \t \t \t // Do zrobienia Automatycznie generowane catch // \t \t \t \t w.printStackTrace(); // \t \t \t} – xydev

6

Korzystanie 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); 

Uwaga: nie jestem pewien, ta sama klasa jest dostępna w Andriod.

+1

Dobra odpowiedź. Najprawdopodobniej musisz nałożyć na "mm" wielką literę na miesiąc, w przeciwnym razie dostaniesz tam minuty. :) – Erica

+0

Android opiera się na Javie 1.5, więc klasa istnieje. – Pentium10

+0

@ Eryka dziękuje :), @ Pentium10 Dzięki za informację –

1

Możesz wykonywać różnego rodzaju wymyślne formatowanie i lokalizację dat za pomocą klasy DateFormat. Na początku strony interfejsu API znajduje się bardzo dobra, kompletna dokumentacja: http://download.oracle.com/javase/1.4.2/docs/api/java/text/DateFormat.html

Większość zwykłych przypadków może być obsługiwana za pomocą wbudowanego obiektu SimpleDateFormat. Jej szczegóły są tutaj: http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html

wzorzec wyjściowy ciąg SimpleDateFormat dla przykładu masz powyżej byłoby:

yyyy-MM-dd hh:mm a 
+0

'a' jest znacznikiem AM/PM, nie pobiera Strefa czasowa. –

+0

@ The-Elite-Gentlemen, tak, to był format wyjściowego łańcucha, którego zażądał xydev; "2010-06-14 02:21 AM". :) – Erica

0

Uważaj, jeśli są uruchomione na emulator Twoja strefa czasowa to zawsze GMT. Właśnie spędziłem 2 godziny, próbując zrozumieć, dlaczego moja aplikacja nie daje mi odpowiedniego czasu (ten, który wyświetla mój komputer), dopóki nie zdałam sobie sprawy, że to z powodu emulatora.

Aby sprawdzić używasz na zastosowaniu emulatora

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 
} 
Powiązane problemy