Ich bin etwas verwirrt über Zeitzonen in Schienen. Ich möchte, dass meine Rails-App die britische Sommerzeit (wie die Sommerzeit in den USA) für die Zeitstempel verwendet, die in den Modellen updated_at und created_at in meinen Modellen festgelegt sind. Ich änderte meine environment.rbZeitstempel von Schienen verwenden nicht die richtige Zeitzone
config.time_zone = 'London'
Der Ubuntu-Server meiner app zu sagen, sind auf BST zu verwenden, scheint es an der Zeit: in der Befehlszeile, zum Beispiel, wenn i ‚date‘ Typ i die aktuelle Zeit erhalten (nicht um eine Stunde versetzt). In der Schienenkonsole sehe ich folgendes:
Alles gut. Wenn ich jedoch ein neues AR-Modellobjekt anlege und es speichere, sind die Zeitstempel vor einer Stunde. Es sieht so aus, als ob UTC verwendet wird. Nun kann ich die Logik darin sehen: Da die Zeitstempel in der Modelllogik verwendet werden können, möchten Sie, dass sie auf einer unveränderlichen Messuhrzeit basieren, dh UTC. Aber dies ist ein seltsames Stück Verhalten, das ich nicht verstehe:
#change a record and save it
>> someobj.save
=> true
#object's updated_at is one hour ago
>> someobj.updated_at
=> Wed, 27 Oct 2010 15:34:22 UTC +00:00
>> Time.now
=> Wed Oct 27 16:34:31 +0100 2010
#however, Time.now - object's updated at is just a few seconds.
>> Time.now - someobj.updated_at
=> 15.305549
Also, bevor die Subtraktion tun, updated_at in die aktuelle Zeitzone umgewandelt wird.
Der Grund, dass ich das Datum in der aktuellen Zeitzone anzeigen möchte, ist nur für Statusberichte usw. in den Ansichten: Wenn jemand etwas aktualisiert, möchte ich sehen, dass es vor '1 Minute' und nicht vor '1 Stunde aktualisiert wurde ".
Kann mich jemand unconfused? Prost, max
EDIT: Mein unmittelbares Problem, die richtige Zeit im Status zu zeigen, wird gelöst, indem Sie den "time_ago_in_words" Helfer verwenden, der sich für die Zeitzone einstellt. Ich möchte immer noch jemanden, der erklärt, was mit den Zeitstempeln passiert :)
ah - das ist großartig. Vielen Dank! Ich stimme zu, dass es sinnvoll ist, sie alle in UTC zu behalten. –
ok, ich habe es. aber wenn ich die localtime auf der datetime anzeigen möchte, auf meiner Ansicht auswählen was kann ich tun? – Diego
Wahrscheinlich ist der beste Weg, eine JavaScript-Methode zu verwenden, um Systemzeiten den lokalen Zeiten des Browsers zuzuordnen. Das ist eine andere Frage. – tadman