Ich kratze eine Website, um das Datum und die Uhrzeit einer Episode zu erhalten. Also, was ich bekomme, ist Samstage um 01:05 (JST), was die Zeit in Japan ist. Ich habe ein Feld in meiner Episodentabelle namens Broadcast und es hat ein DateTime-Format. Was ist der beste Weg, dies zu umgehen und die Zeitzone auf (PST) zu ändern?So behandeln Sie einen DateTime-Stil wie Samstag um 01:05 (JST)
Antwort
Angenommen, Sie kratzen buchstäblich die Zeichenfolge Saturdays at 01:05 (JST)
von der Website, gibt es ein paar Dinge zu beachten.
Erstens, ein einzelnes DateTime-Feld ist nicht wirklich gehen in der Lage, eine wiederkehrende Zeit, wie Sie haben, zu repräsentieren. Edelsteine wie IceCube wurden erstellt, um die Komplexität von wiederkehrenden, geplanten Daten zu behandeln. Aber Sie können mit einem DateTime-Feld auskommen, unter der Annahme, dass es eine Instanz der Sendung speichert und alle anderen Sendungen jede Woche zur gleichen Zeit und am gleichen Tag sind.
Jetzt müssen Sie die Zeichenfolge, die Sie scrapping in das Datum analysieren. Der einfachste Weg, dies zu tun, ist mit der Chronic Edelstein, die alle Arten von Englisch-formulierte Zeit Darstellungen nimmt und verwandelt es in ein Datum. Mit Ihrem Datum, müssen Sie „Samstag“ unpluralize so dass Chronic kennt nur den nächsten Samstag zu finden:
require 'chronic'
string = "Saturdays at 1:30 (JST)"
broadcast = Chronic.parse(string.sub('days', 'day'))
Die broadcast
Variable enthält jetzt einen DateTime
Wert, die Sie direkt in der Datenbank speichern können. Sorgen Sie sich nicht um die Zeitzone - Chronic gab einen Zeitwert mit Zoneninformationen zurück, so dass Rails es in Ihrer Datenbank in UTC speichert und es bei jedem Laden wieder in Ihre Serverzeitzone konvertiert.
Wenn Sie die Zeit auf eine bestimmte Zone jemals konvertieren wollen, können Sie dies einfach tun:
pst_time = broadcast.in_time_zone('Pacific Time (US & Canada)')