Jestem całkiem nowym użytkownikiem Javy i trochę utknąłem przy użyciu SimpleDateFormat
i Calendar
. Mam obiekt Date i chcę wyodrębnić datetime takie jak yyyy-MM-dd HH:mm:ss
. Mieszkam w Niemczech i obecnie jesteśmy GMT +0200. Mój czas-obiekt czas jest na przykład 2011-07-18 13:00:00
. Teraz potrzebuję 2011-07-18 11:00:00
. Przesunięcie dla mojej strefy czasowej powinno być obliczane automatycznie.Konwersja GMT DateTime String
Próbowałem coś takiego, ale myślę, że tam gdzieś jest błąd:
private String toGmtString(Date date){
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
TimeZone timeZone = TimeZone.getDefault();
Calendar cal = Calendar.getInstance(new SimpleTimeZone(timeZone.getOffset(date.getTime()), "GMT"));
sd.setCalendar(cal);
return sd.format(date);
}
Na niektórych urządzeniach DateString jest zwracanych jak chcę go. Na innych urządzeniach przesunięcie nie jest obliczane prawidłowo, a datę i czas otrzymuję z obiektu danych wejściowych. Czy możesz udzielić mi wskazówek lub porad? Domyślam się, że mój sposób na pozbycie się domyślnej strefy czasowej nie działa?
Nie mogę uwierzyć, że to takie proste, ale oczywiście spróbuję. Daj mi kilka minut, proszę ... – Marco
Ok .. Przetestowałem .. Użyłem obiektu daty, który reprezentuje '2011-07-18 13: 34: 27'. Używając domyślnej funkcji daty '.toGMTString()' Otrzymuję '18 lipca 2011 11:43:27 GMT', który jest dokładnym punktem w czasie, który potrzebuję. Korzystając z mojej własnej funkcji nadal otrzymuję' 2011-07-18 13: 43: 27 ", który był moim problemem. Korzystając z funkcji Jigara Joshina otrzymuję komunikat "2011-07-18 12: 43: 27", którego brakuje 1 godzina (europejski czas letni). Korzystając z funkcji Eli Acherkans, otrzymuję '2011-07-18 11: 43: 27', co jest dokładnie tym, czego chciałem (Offset z uwzględnieniem europejskiego lata). – Marco
+1 –