für eine Weile zu verstehen, ich versuche, wie diese Zeitzone mal funktioniert, und ich hatte eine Frage:Rails Zeitzone und Sommerzeit
heute in meinem Land, wir sind in der Sommerzeit (GMT-2). So der Benutzer meiner Anwendung geben Sie eine Zeit, wie 11:00 Uhr und senden Sie das Formular. Soweit ich weiß, wird Rails dieses Datum in UTC konvertieren und in der Datenbank speichern (mysql in meinem Fall), wie: 01:00 PM UTC.
Wenn ich diesen Datensatz wiederherstellen, musste ich auf lokale Zeit konvertieren, um anzuzeigen. OK?
Meine Frage ist, nehmen wir an, dass dieses Datum/diese Uhrzeit ein Datum/eine Uhrzeit in der Zukunft darstellt, wenn mein Land aus der Sommerzeit herauskommt (GMT-3). Schienen sparen 01.00 Uhr UTC? Wie wird es heute in der Sommerzeit sein? Und wie wird es in Zukunft sein?
Grundsätzlich muss ich immer um 11.00 Uhr Benutzer anzeigen.
danke.
Also, es ist eine Frage der Anzeige, immer. Alle Datumswerte, die an einen Filterparameter übergeben werden, müssen in diesem Fall in UTC konvertiert werden. – Beetlejuice
Das ist der richtige Weg, um darüber nachzudenken, obwohl vielleicht meine Wahl der Wörter "angezeigt" war nicht hilfreich. Ich hatte vor ein paar Wochen einen Fall, bei dem ein Partner um 2 Uhr morgens einen Job hatte (unabhängig von der DST-Korrektur), was bedeutete, dass wir uns damit abstimmen mussten. In Wahrheit spielt es keine Rolle, in welcher Zeitzone das Datum als * gespeichert wird, solange es die Zeitzone * enthält - wenn Sie Ihre eigene Zeitzone und die des gespeicherten Datums kennen, haben Sie alles, um die Zeit einzustellen und anzuzeigen wie auch immer du es brauchst. Das Speichern von Daten als UTC (und das Setzen von Systemen auf UTC) macht das alles einfacher. –
Nun, lassen Sie uns annehmen, dass wir jetzt in der Sommerzeit sind und wir einen Rekord um 8 Uhr Ortszeit speichern. Dies wird eine 10-Uhr-Datei in der Datenbank speichern. Auf der anderen Seite, stellen Sie fest, dass jetzt die normale Zeit ist und wir speichern eine Aufzeichnung um 8 Uhr Ortszeit und speichern 11 Uhr UTC in der Datenbank. Es ist nicht möglich, beide Aufzeichnungen als 8 Uhr für den Benutzer anzuzeigen. Nun, wenn wir alle auf UTC einstellen, wird es funktionieren. – Beetlejuice