2016-07-11 23 views
0

Momentan wird das Geburtsdatum eines Benutzers in Millisekunden gespeichert (seit 01.01.1970). Muss ich sicherstellen, dass in jedem Land das gleiche Geburtsdatum gilt oder ist es üblich, dass es am 11. November in Land X und am 12. November in Land Y ist?Geburtsdatum: Gleiches Geburtsdatum in jedem Lokal?

Wenn es stattdessen üblich ist, in jedem Land genau das gleiche Geburtsdatum zu haben, wie könnte ich sicherstellen, dass die Millisekunden, die ich speichere, immer auf den gleichen Tag des Monats in jedem Land zeigen?

+1

Welche Sprache verwenden Sie? –

+0

Ich verwende UTC, um die Millisekunden zu speichern. aber wenn sie in der Benutzeroberfläche angezeigt werden, werden sie natürlich auf die Gebietsschemazeit übertragen. – Mulgard

+0

OK, jetzt wissen wir, dass Sie einige UI-Sachen machen. JavaScript? Vielleicht Angular oder JQuery? Komme ich näher? –

Antwort

3

Ignorieren time-of-day

Nur wenige Menschen die Zeit-of-Tag ihrer Geburt wissen. Also, nein, diese Detailebene wird nicht allgemein verfolgt. Auf Pässen und dergleichen sehen Sie nie Geburtszeit und Geburtszeitzone. Sie verfolgen einen Nur-Datum-Wert ohne Tageszeit und ohne Zeitzone.

Barkeeper, Grenzkontrollagenten usw. verwenden das lokale aktuelle Datum, um das Alter zu berechnen, ohne dass versucht wird, die Tageszeit zu berücksichtigen oder die Zeitzone anzupassen. Berücksichtigen Sie, dass der Unterschied zwischen den Teilen des Tages abgeschnitten und ignoriert wird.

Um einen Zeitpunkt von einer Zeitzone zur anderen genau einzustellen, benötigen Sie ein Datum und eine Uhrzeit. Ohne eine Tageszeit haben Sie vielleicht 23-25 ​​Stunden möglicher Momente, in denen ihre Geburt stattgefunden haben könnte. Eine Geburt, die in Paris (1 oder 2 Stunden vor UTC) am 24. stattfindet, ist in Montréal noch "gestern", die 23. in Montréal (4 oder 5 Stunden hinter UTC). Aber wenn diese Geburt um 06:00 Uhr am 24. auftritt, dann ist das Datum das gleiche (24.) in beiden Paris & Montreal, aber ist "gestern" (23.) in Vancouver BC und Seattle, wo die Uhren 7 oder 8 Stunden zurück sind KOORDINIERTE WELTZEIT.

SQL

In SQL verwenden, um einen Datentyp ähnlich den Standard-DATE-Typen.

Java

In Java, verwenden Sie die LocalDate Typ. Verwenden Sie die MonthDay Klasse, um den wiederkehrenden Monat und Tag der Geburtstagsfeier darzustellen.

Für Interaktion mit einer Datenbank, Treiber, die 4.2 mit JDBC entsprechen soll direkt arbeiten kann mit LocalDate über die getObject & setObject Methoden auf einem PreparedStatement. Wenn nicht, greifen Sie auf die alte java.sql.Date zurück. Neue Methoden, die dieser alten Klasse hinzugefügt wurden, erleichtern die Konvertierung.

ISO 8601

Wenn Stringdarstellungen von Datum-Zeit-Werte zu erzeugen, verwenden Sie die Formate in der ISO 8601 Standard wie YYYY-MM-DD, ex definiert: 1960-07-11. Für das Datum ohne Jahr verwenden Sie --MM-DD, zB: --07-11. Die java.time-Klassen in Java verwenden beim Analysieren und Generieren von Strings standardmäßig ISO 8601-Formate.

Erzwingen time-of-day

Wenn aus irgendeinem Grund Sie gezwungen sind, ein Datum-only-Wert in ein Datum-Zeit-Feld zu setzen, dann müssen Sie einige beliebige Zeit-of-Tag. Mittag ist eine Möglichkeit. Ich schlage vor, den Zeitabschnitt auf den ersten Moment des Tages einzustellen.

erste Moment des Tages

Beachten Sie, dass der erste Moment nicht ist immer 00:00:00. Sommerzeit (DST) und möglicherweise andere Anomalien beeinflussen Mitternacht in einigen Zeitzonen. So könnte der erste Moment des Tages 01:00:00 zum Beispiel sein. Java kann den ersten Moment des Tages für eine bestimmte Zeitzone bestimmen.

ZoneId zoneId = ZoneId.of("America/Montreal"); 
LocalDate today = LocalDate.now(zoneId); 
ZonedDateTime startOfToday = today.atStartOfDay(zoneId); 
1

Es liegt an Ihnen zu entscheiden, welche Zeitzone ein ausgewähltes Geburtsdatum interpretiert und welche Zeitzone bei der Anzeige des Geburtsdatums verwendet werden soll. Meiner Meinung nach ist es logisch, immer die Zeitzone des Geburtsortes zu verwenden, wenn man das Geburtsdatum von einem Zeitstempel in eine lesbare Form umwandelt und speichert. Andernfalls können Sie GMT oder eine andere Zeitzone als Ihre Konvention verwenden. Dadurch wird sichergestellt, dass alle Benutzer in allen Ländern das gleiche Geburtsdatum sehen, es wird jedoch empfohlen, die Zeitzone an die Datumsdarstellung anzuhängen, um Verwechslungen zu vermeiden. Sie können natürlich wählen, Daten als GMT-basiert zu interpretieren, wenn Sie den zu speichernden Zeitstempel erstellen, und dann das Geburtsdatum mit einer benutzerdefinierten Zeitzone wiedergeben (möglicherweise Zeitzone für das Benutzerkonto). In diesem Fall wird das Datum (und die Uhrzeit, wenn Sie die Geburtszeit angeben) für jeden Benutzer unterschiedlich angezeigt.