2013-02-15 12 views
5

Próbuję przeanalizować datę z ciągu i uzyskać długą wartość. Długa wartość zostanie później wysłana do zapytania SQL.Uzyskaj poprawną długą wartość z przeanalizowanej daty (wydanie strefy czasowej)

oto mój kod:

String dayDate = "28-02-2013";    
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); 
Date day = new Date(); 
try { 
    day = sdf.parse(dayDate); 
} catch (ParseException pe) { 
    pe.printStackTrace(); 
} 
System.out.println("day : "+day.toString()+ " long : " + day.getTime()); 

co daje następujący wynik:

day : Thu Feb 28 00:00:00 EET 2013 long : 1362002400000 

która jest poprawna, ale nie to, co chcę od wyników wartości w długim Wed, 27 lutego 2013 22:00 : 00 GMT (http://www.epochconverter.com/) (Jestem w strefie czasowej GMT + 2). I muszę wysłać, aby poprawić długą wartość do sql.

Czy istnieje sposób obejścia tego bez korzystania z zewnętrznych bibliotek?

Odpowiedz

5

SimpleDateFormat ma charakter locale, co oznacza, że ​​data, którą analizuje, znajduje się w strefie czasowej. O północy 28 lutego w GMT + 2 jest rzeczywiście godzina dwudziesta druga 27 lutego w GMT, długa wartość 1362002400000. Dodam to, aby uzyskać prawo parsowania (would't przejmuj się korzystania kalendarz):

sdf.setTimeZone(TimeZone.getTimeZone("GMT")) 

Ponownie, podczas drukowania Ta data używa SimpleDateFormat i dlatego możesz zobaczyć EET w wynikach.

Przekazywanie tego do bazy danych to inna historia, ale gdy już to zrobisz.

+0

To było proste :) Wielkie dzięki! – drayn

+0

Nie ma za co. – n0rm1e

0
Calendar calendar = Calendar.getInstance(); 
    calendar.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles")); 
    Date date = calendar.getTime(); 

Użyj String Strefa czasowa:

TimeZones

1

Jeśli dodać specyfikator czasowej do łańcucha można wymusić java używać GMT dla konwersji:

String dayDate = "28-02-2013";    
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy z"); // z is a timezone specifier 
Date day = new Date(); 
try { 
    day = sdf.parse(dayDate + " GMT"); // Use GMT timezone. 
} catch (ParseException pe) { 
    pe.printStackTrace(); 
} 
System.out.println("day : "+day.toString()+ " long : " + day.getTime()); 
+0

Podoba mi się twoje podejście, ale pójdę z odpowiedzią houman001. Dzięki! – drayn

+0

Dobry wybór. Jego rozwiązanie to bardziej elegancki sposób na zrobienie tego samego. –

1

Jesteś konwersja między tekstem a wewnętrznymi (Date) reprezentacjami dat i godzin bez wyraźnego określenia strefy czasowej. That never goes well.

Powiązane problemy