Lokale Datum & Uhrzeit in UTC und dann von UTC in lokale Datum & Zeit
Ich versuche zu konvertieren locale Zeit auf UTC, und dann UTC-die locale Zeit. Aber ich bin nicht immer das Ergebnis.
public class DateDemo
{
public static void main(String args[])
{
DateFormat dateFormatter =
DateFormat.getDateTimeInstance
(DateFormat.SHORT, DateFormat.SHORT, Locale.getDefault());
TimeZone.setDefault(TimeZone.getDefault());
SimpleDateFormat simpleDateFormatter = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat simpleTimeFormatter = new SimpleDateFormat("hh:mm:ss a");
Date today = new Date();
String localeFormattedInTime = dateFormatter.format(today);
try
{
Date parsedDate = dateFormatter.parse(localeFormattedInTime);
System.out.println("Locale:" + localeFormattedInTime);
System.out.println("After parsing a date: " + parsedDate);
simpleDateFormatter.setTimeZone(TimeZone.getDefault());
simpleTimeFormatter.setTimeZone(TimeZone.getDefault());
String date = simpleDateFormatter.format(today);
String time = simpleTimeFormatter.format(today);
System.out.println("Today's only date: " + date);
System.out.println("Today's only time: " + time);
////Locale to UTC converting
simpleDateFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
simpleTimeFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
String utcDate = simpleDateFormatter.format(today);
String utcTime = simpleTimeFormatter.format(today);
System.out.println("Convert into UTC's date: " + utcDate);
System.out.println("Convert into UTC's only time: " + utcTime);
////UTC to locale converting
simpleDateFormatter.setTimeZone(TimeZone.getDefault());
simpleTimeFormatter.setTimeZone(TimeZone.getDefault());
Date getDate = simpleDateFormatter.parse(utcDate);
Date getTime = simpleTimeFormatter.parse(utcTime);
String getLocalDate = simpleDateFormatter.format(getDate);
String getLocalTime = simpleTimeFormatter.format(getTime);
System.out.println("Get local date: " + getLocalDate);
System.out.println("Get local time: " + getLocalTime);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Ich schicke lokale Datum & Zeit, um die web-service -, und dann, wenn erforderlich, die ich brauche zum abrufen der UTC-Datum & Zeit und konvertieren Sie dann in locale Datum & Zeit (D. H. Benutzer, lokale Einstellungen).
Beispiel-Ausgabe:
Locale:11/9/12 8:15 PM
After parsing a date: Fri Nov 09 20:15:00 SGT 2012
Today's only date: 09/11/2012
Today's only time: 08:15:30 PM
Convert into UTC's date: 09/11/2012
Convert into UTC's only time: 12:15:30 PM
Get local date: 09/11/2012
Get local time: 12:15:30 PM
Nach Saksak & ADTC Antworten:
Für das code-fragment, UTC-Datum & Zeit (was wird tatsächlich kommen, wie GMT-5, weil die Datenbank möglicherweise in den USA) ist der Eingang, und ich will so lokale Datum & Zeit, die als Ausgabe. Aber das folgende segment ist immer noch die GMT-5 Zeit.
SimpleDateFormat simpleDateTimeFormatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss a");
....
Date inDateTime = simpleDateTimeFormatter.parse(intent.getExtras().getString("inTime")); Date outDateTime = simpleDateTimeFormatter.parse(intent.getExtras().getString("outTime"));
simpleDateTimeFormatter.setTimeZone(TimeZone.getDefault()); simpleDateTimeFormatter.setTimeZone(simpleDateTimeFormatter.getTimeZone());
//TimeZone tzTimeZone = TimeZone.getDefault();
//System.out.println("Current time zone: " + tzTimeZone.getDisplayName());
String getLocalInTimeString = simpleDateTimeFormatter.format(inDateTime);
String getLocalOutTimeString = simpleDateTimeFormatter.format(outDateTime);
Meine Frage: getLocalInTimeString
& getLocalOutTimeString
noch zeigen GMT-5 timing. Was ist hier falsch? Muss ich irgendwelche anderen Dinge?
- Was genau funktioniert nicht? Ausnahmen? Stacktraces? Ausgabe nach der Ausführung des Programms?
- Share yours-Code, wird der sound für unser Effektives Gespräch..
- beachten Sie, dass die Verwendung von zwei separate Parser für das Datum und die Zeit verursachen kann-Konvertierung Probleme. Um Sie zu vermeiden, verwenden Sie einen parser zum Parsen von Datum und Zeit zusammen. Bitte siehe meine Antwort für weitere details.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie tun müssen, um Ihr problem zu lösen ist die folgende, müssen Sie Ihren code zu konvertieren zurück zu local time in dieser Reihenfolge :
und was Sie tun müssen, ist warten, bis Sie analysieren utcDate, utcTime Strings zurück zum Date-Objekt
dann legen Sie die Datums-formatter-Zeit-zone zu lokale zone wie folgt :
diese ausdrucken sollte das richtige Datum/Uhrzeit in der lokalen.
Bearbeiten:
hier ist die komplette main-Methode :
Dein problem ist in den Zeilen 54 und 55:
Diese Linien sind lediglich analysieren von Zeichenfolgen enthalten das Datum und die Zeit, aber diese Saiten haben keine Zeitzone Informationen:
Daher der parser setzt Voraus, dass die Strings sind bereits in das Gebietsschema der die timezone setzen Sie in den Zeilen 51 und 52.
Nun darüber nachdenken, wie es zu beheben 😉 HINWEIS: Stellen Sie sicher, dass der parser ist unter der Annahme der korrekten Zeitzone der Zeit vertreten durch die Saiten.
PS: [GELÖST!]
habe ich das problem gelöst, aber ich entdeckte, dass das Zeitzonen-Konvertierung ist unberechenbar, für zumindest wo ich bin.die Zeit ist8:30 pm
lokalen. Konvertieren von UTC,12:30 pm
(richtig, 8 Stunden Unterschied). Konvertieren Sie zurück, es ist8:00 pm
(FALSCH, auch wenn die Zeitzone korrekt ist - ich habe das original ein und zog es zurück in - ich bin nur immer 7.5 Stunden Differenz).sollten Sie sich für mehr zuverlässige Wege, es sei denn, Sie herausfinden können, was Los ist und wie es zu lösen.[AUFLÖSUNG:] Das oben erwähnte problem war eigentlich nur, weil der original-code war die Aufteilung der Datum und Uhrzeit in zwei verschiedenen Parser. Wenn Sie nur ein parser für Datum und Zeit kombiniert, erhalten Sie das korrekte Datum und die Zeit in der Ziel-locale. So zum Schluss der parser ist zuverlässig, aber die Art und Weise Sie es verwenden macht einen großen Unterschied!
, WARUM DIE VERWENDUNG VON ZWEI SEPARATE PARSER FÜR DATUM UND UHRZEIT IST UNZUVERLÄSSIG:
Wie oben erklärt, ist es eine schlechte Idee, verwenden Sie zwei separate Parser für Datum und Zeit teilen. Ist hier, warum:
Bekomme ich die halbe Stunde Unterschied, weil das default-Datum
01/01/1970
wird in derDate
variable speichern von Uhrzeit (zweite Zeile). Wenn dies ist, Umgerechnet auf die lokale Zeitzone, der Fehler ist passiert, als der formatter Grundlagen für die Umstellung auf die Standard-Datum01/01/1970
(wo ich wohne, der Zeitverschiebung war es +7.5 Stunden 1970 - heute ist es +8 Stunden). Dies ist der Grund, warum zwei getrennte Parser nicht zuverlässig, auch wenn Sie das richtige Ergebnis und verwenden Sie immer eine kombinierte parser akzeptiert sowohl Informationen zu Datum und Uhrzeit.