2010-07-14 6 views
6

Ich habe eine Datenbank, die von einer Nicht-Rails-Anwendung geschrieben und von einer Rails-Anwendung gelesen wird. Es gibt ein Datetime-Feld in der Datenbank und die in diesem Feld gespeicherten Daten werden in Eastern Time gespeichert. In meiner Rails-App verstehe ich, dass ich die Zeitzone der Anwendung in meiner environment.rb-Datei festlegen kann, indem ich config.time_zone = 'Eastern Time (US & Canada)' tue. Rails geht jedoch davon aus, dass die in der Datenbank gespeicherten Daten in UTC gespeichert sind und konvertiert von config.time_zone in UTC, wenn Informationen in die Datenbank hinein und aus der Datenbank abgerufen werden.Rails/ActiveScord Datenbankfeld Zeitzone

Gibt es eine Möglichkeit, Schienen die Daten in diesem bestimmten Feld, oder sogar alle meine Datetime Felder, ist Eastern Time und nicht UTC?

Antwort

0

Mein erster Vorschlag ist, die andere Anwendung zu beheben. Die andere Anwendung sollte einen UTC-Offset mit dem Datum speichern. Wenn Sie versuchen, ein Problem zu umgehen, erstellen Sie einfach mehr. Zum Beispiel, was passiert, wenn die Sommerzeit vergeht, dann ändern sich die Offsets?

, dass keine andere Wahl gesagt und mit zu werden - ich etwas in dieser Richtung, für ein Feld created_at tun würde:

def created_at_in_eastern 
    DateTime.parse(self.created_at.strftime("%D %T EST")) if self.created_at 
end 

oder können Sie EDT je nachdem, wie die Daten gespeichert werden, nur lesen Sie den Disclaimer verwenden ganz oben - das ist ein Hack!

1

config.active_record.default_timezone - Weist Active Datenbank Zeiten wie in der angegebenen Zeitzone ist, zu interpretieren und diese Zeitzone zu verwenden, um mit der created_at & Arbeits updated_at Attributen.

8

On Rails 3.0.5 in application.rb, das funktioniert:

config.time_zone = 'Central Time (US & Canada)' 
config.active_record.default_timezone = :local 
Verwandte Themen