Ich habe Probleme beim Konvertieren einer UTC Time
oder TimeWithZone
der Ortszeit in Rails 3.
Say moment
ist eine Time
Variable in UTC (z moment = Time.now.utc
. B. ). Wie konvertiere ich moment
in meine Zeitzone und kümmere mich um die Sommerzeit (dh mit EST / EDT)?
Genauer gesagt, ich möchte "Montag, 14. März, 9 Uhr" ausdrucken, wenn die Zeit heute Morgen 9 Uhr EDT entspricht, und "Montag, 7. März, 9 Uhr", wenn die Zeit letzten Montag 9 Uhr EST war.
Hoffentlich gibt es einen anderen Weg?
Bearbeiten : Ich dachte zuerst, dass "EDT" eine erkannte Zeitzone sein sollte, aber "EDT" ist keine tatsächliche Zeitzone, eher wie der Zustand einer Zeitzone. Zum Beispiel würde es keinen Sinn machen, danach zu fragen Time.utc(2011,1,1).in_time_zone("EDT")
. Es ist ein wenig verwirrend, als „EST“ ist eine aktuelle Zeitzone, in wenigen Orten verwendet , das Tageslicht nicht auf Sommerzeit verwenden und sind (UTC-5) einjährig.
quelle
(new Date()).getTimeZoneOffset()
. Aber es ist ziemlich inkonsistent, also scheint dieser Typ sein eigenes geschrieben zu haben: onlineaspect.com/2007/06/08/…config.time_zone = 'Wellington'
und dann Time.current verwenden (was time.now entspricht, aber die von Ihnen festgelegte Zeitzone verwendet)Time#localtime
gibt Ihnen die Zeit in der aktuellen Zeitzone des Computers an, auf dem der Code ausgeführt wird:Update: Wenn Sie zu bestimmten Zeitzonen anstatt zu Ihrer eigenen Zeitzone konvertieren möchten, sind Sie auf dem richtigen Weg. Anstatt sich über EST oder EDT Gedanken zu machen, gehen Sie einfach in die allgemeine östliche Zeitzone - sie wird anhand des Tages wissen, ob es sich um EDT oder EST handelt:
quelle
in_time_zone
Methode mit ihrer Zeitzone zu verwenden.Time.now.localtime
funktioniert in einer normalen irb-Sitzung, aber wenn ich versuche, sie auf einem Computer auszuführen, der sich in der UTC-Zeitzone befindet, funktioniert sie nicht.Es ist einfach, es mithilfe der lokalen Systemzone zu konfigurieren. Fügen Sie dies einfach in Ihrer application.rb hinzu
Dann sollten Schienen Ihnen Zeitstempel in Ihrer Ortszeit anzeigen, oder Sie können so etwas wie diese Anweisung verwenden, um die Ortszeit zu erhalten
quelle
Es gibt tatsächlich einen netten Edelstein, der
local_time
von basecamp aufgerufen wird, um all das nur auf Kundenseite zu tun, glaube ich:https://github.com/basecamp/local_time
quelle
Ich weiß nicht warum, aber in meinem Fall funktioniert es nicht wie zuvor vorgeschlagen. Aber es funktioniert so:
Natürlich müssen Sie den
offset
Wert auf Ihren ändern .quelle
Wenn Sie dies tatsächlich tun, nur weil Sie die Zeitzone des Benutzers abrufen möchten, müssen Sie lediglich Ihre Zeitzone in Ihnen ändern
config/applications.rb
.So was:
Rails speichert Ihren Zeitrekord standardmäßig in UTC, auch wenn Sie die aktuelle Zeitzone angeben.
Das ist also alles, was Sie tun müssen und Sie können loslegen.
quelle