Ich habe eine Anwendung, in der Benutzer Fragen erstellt und andere können Datum Datum sehen (wenn die Frage erstellt wurde) mit ihm. Jetzt bekomme ich die Server Datum Zeit und speichern Sie es in db, aber das Problem ist App wird von jemand, der in einem Land mit einer 6-7 Stunden Lücke leben. Nun ein kleines Beispiel wäre, dass ich in einem Land lebe und ich um 19:00 Uhr Frage kreiere, aber die Zeit in den USA ist 11:00 (nur ein Tipp). So ruft der Benutzer sofort die Frage ab, aber für ihn sollte die Frage 11 Uhr und nicht 19 Uhr sein. Wie kann ich das Datum speichern, damit es für alle Zeitzonen gleich ist? Ich bin irgendwie verwirrt , also brauche ich ein wenig Hilfe. Ich weiß, dass es mit UTC Date Time zusammenhängt, aber kann jemand dieses ein bisschen mehr ausarbeiten :). Thank uSpeichern Datum Zeit für alle Zeitzonen in Java
Antwort
Speichern Sie in Ihrer Datenbank die Differenz, gemessen in Millisekunden, zwischen der aktuellen Uhrzeit und der epoch von Mitternacht, 1. Januar 1970 UTC. dass Sie erhalten können, indem Sie System.currentTimeMillis()
anrufen.
Sobald Sie es haben können Sie die Zeit in jeder Time Zone, die Sie wollen, hier ist ein einfaches Code-Snippet, das die Zeit in all the time zones auf meinem Rechner zur Verfügung stellt.
Dieser Code verwendet das in Java 8 und höher integrierte Framework java.time. Ein Großteil dieser Funktionalität war auch back-ported to Java 6 & 7 und to Android.
long time = System.currentTimeMillis();
Instant instant = Instant.ofEpochMilli(time);
ZoneId.getAvailableZoneIds().stream().forEach(id -> {
ZoneId zId = ZoneId.of(id);
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zId);
System.out.printf(
"The current time in %s is %s%n",
zId, localDateTime.format(DateTimeFormatter.ISO_DATE_TIME)
);
}
);
Hier ist das Äquivalent für ältere Versionen von Java:
long time = System.currentTimeMillis();
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(time);
for (String id : TimeZone.getAvailableIDs()) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
formatter.setTimeZone(TimeZone.getTimeZone(id));
System.out.printf(
"The current time in %s is %s%n", id, formatter.format(cal.getTime())
);
}
Antwort Update:
Wie Sie das Original TimeZone
behalten möchten, werden Sie auch die Zeit zu speichern haben Zonen-ID in Ihre Datenbank im Format Pseudo-Standard Format GMT +/- mm: ss.
Dazu müssen Sie zunächst das Delta erhalten im Vergleich zu UTC-Zeit (in Code-Snippet tz
ist meine aktuelle Zeitzone):
int offsetFromUTC = tz.getOffset(time);
daraus Dann können Sie dieses Delta in Millisekunden in denen umwandeln erwartete Zeitzone-ID, die wie dies getan werden kann:
String timeZoneId = String.format(
"GMT%+02d:%02d", offsetFromUTC/(60 * 60 * 1000), offsetFromUTC/(60 * 1000) % 60
);
der Wert von timeZoneId
ist der zweite Wert, den Sie in der Datenbank zu speichern haben. Mit diesen beiden Werten können Sie die Uhrzeit in jedem erwarteten Format anzeigen, zum Beispiel:
Calendar cal = Calendar.getInstance();
// Here I use the time retrieved from the DB
cal.setTimeInMillis(time);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
// Here I use the time zone id retrieved from the DB
TimeZone tz = TimeZone.getTimeZone(timeZoneId);
formatter.setTimeZone(tz);
System.out.printf("The current time in %s is %s%n", id, formatter.format(cal.getTime()));
ich kann nicht sowohl Instant- als auch ZoneID-Klassen importieren, was bedeutet, dass ich eine Bibliothek benutzen muss? . Aber ich möchte keine Bibliothek verwenden –
es ist Teil von Java 8, welche Version von Java verwenden Sie? –
@SyedMuhammadOan Ich aktualisierte meine Antwort für die vorherige Version von Java –
So wie kann ich Datum Zeit zu sparen, so dass es für alle Zeitzonen gleich sein würde
Sie sollten UTC verwenden Ihre Daten zu speichern, so dass, wenn jemand Ihre Anwendung in +1 Zeitzone mit , müssen Sie zuerst in UTC konvertieren. Zeitzone sollte nur verwendet werden, um die Zeit für die Benutzer anzuzeigen.
Oder speichern Sie einfach das gesamte Datum + Zeitzone; Sie können nach Belieben in eine beliebige Zeitzone umwandeln.Wenn Sie Joda Time verwenden, ist es besonders einfach – fge
U bedeutet, ich sollte das Datum in DB speichern und es in meiner Android App konvertieren? –
Ja. Verwenden Sie die Zeitzone, um dem Benutzer nur die Zeit als "lokal" anzuzeigen. Also, wenn er/sie die Zeitzone ändert, zB weil er unterwegs ist, wird immer noch die richtige Zeit in der TZ angezeigt/er wird dann –
- 1. Speichern von Datum und Zeitzonen in MongoDB
- 2. Datumsangaben ohne Zeit- oder Zeitzonen-Komponente in Java/MySQL
- 3. Zeitzonen für verschiedene Benutzer
- 4. Zeit Umwandlung zwischen Zeitzonen
- 5. Intelligenter Datum/Zeit-Parser für Java
- 6. Zeitzonen in Java/GWT (Client-Seite)
- 7. JSON Datum Serialisierung und Zeitzonen
- 8. Java 7 Datum/Zeit API
- 9. Mysql Datum Problem in verschiedenen Zeitzonen
- 10. Wie man Datum nach Zeitzonen umrechnet
- 11. Differenz Zeitzonen Browser und Java
- 12. Wie Datum und Zeit getrennt in java
- 13. Wie schreibe ich Komponententests, um sicherzustellen, dass mein Datum/Zeit-basierter Code für alle Zeitzonen und ohne Sommerzeit funktioniert?
- 14. Lesen MySQL Datum Zeit als Unix Zeit
- 15. Generieren zufälliger Datum Zeit in Java (joda Zeit)
- 16. Speichern Sie einen Int für jedes Datum in Java
- 17. Druck korrekte Zeit mit Zeitzonen, Python
- 18. Speichern der Zeit in Oracle
- 19. Datum Zeit in Groovy
- 20. Wie behandelt man Zeitzonen in CFML?
- 21. So erhalten Sie Zeit und Datum von Datum-Zeit-Stempel
- 22. Spiel Datum Zeit mit Datenbank Datum Zeit
- 23. Datum ohne Zeit und Zeitzone in Google App Engine speichern
- 24. was Datentyp zum Speichern von Datum Zeit in cassandra
- 25. Zeitzonen in Rails
- 26. Datum Zeit in Xslt
- 27. Arbeiten mit Zeitzonen in SSRS
- 28. Merge Datum & Zeit
- 29. Anforderung zur Überprüfung - Wie Datenbanken und Java Zeitzonen speichern und verarbeiten?
- 30. Zeitzonen in ASP.NET MVC?
Datumsangaben haben keine Zeitzonen. nur Datumsangaben haben. Sie speichern das Datum selbst, und wenn Sie es anzeigen, wenden Sie die Zeitzone abhängig von der Ländereinstellung an. – njzk2