Kann MySQL konvertieren Sie eine gespeicherte UTC-Zeit in die lokale Zeitzone?
Kann MySQL konvertieren Sie eine gespeicherte UTC-Zeit in lokale timezon:ed Zeit direkt in einer normalen select-Anweisung?
Lassen Sie uns sagen, Sie haben einige Daten mit einem Zeitstempel (UTC).
CREATE TABLE `SomeDateTable` (
`id` int(11) NOT NULL auto_increment,
`value` float NOT NULL default '0',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
)
Dann, wenn ich
"select value, date from SomeDateTable";
Ich natürlich erhalten Sie alle Termine in Ihren gespeicherten UTC-form.
Aber sagen wir mal, ich möchte Sie haben in einer anderen Zeitzone (mit Sommerzeit),
kann ich dann fügen Sie etwas Magie, um die select-Abfrage so, dass ich alle Termine zurück, die in der ausgewählten Zeitzone?
"select value, TIMEZONE(date, "Europe/Berlin") from SomeDateTable";
Oder muss ich das in einige andere Schicht auf der Oberseite, wie in einigen php-code?
(es scheint, wie die meisten Leute dieses problem gelöst haben).
Dank
Johan
Wenn Ihre MySQL-installation ermöglicht Ihnen den Einsatz CONVERT_TZ es ist eine sehr saubere Lösung
dieses Beispiel zeigt, wie es zu benutzen.
SELECT CONVERT_TZ( '2010-01-01 12:00', 'UTC', 'Europe/Stockholm' )
Allerdings weiß ich nicht, ob das ein guter Weg, da einige MySQL-installation fehlt diese Funktion, verwenden Sie es mit Vorsicht.
InformationsquelleAutor Johan | 2010-02-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Yup, der Funktion convert_tz.
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_convert-tz
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
InformationsquelleAutor Stephen Fischer
Für diejenigen, die nicht zum konfigurieren der mysql-Umgebung (z.B. aufgrund fehlender SUPER-Zugang) zu verwenden, Menschen-freundliche timezone Namen wie "Amerika/Denver" oder "GMT" Sie können die Funktion auch verwenden, mit numerischen offsets wie diese:
interessant.. in meinem Fall habe ich zu laufen, ein paar Abfragen aus PHP und nicht möchten, dass zu tun, alle TZ Umgang mit den Ergebnissen in PHP, aber ich konnte einfach ändern Sie den numerischen Wert in der select-Abfrage. Dank
InformationsquelleAutor tmsimont
Für die Zeit zu bekommen, verwenden Sie nur:
InformationsquelleAutor Jestin
Ich vorschlagen, verwenden Sie
getan, einmal direkt nach der Verbindung zur Datenbank. und nach diesem alle Zeitstempel werden automatisch konvertiert, wenn Sie Sie auswählen.
Wenn Sie wollen, dass dies dauerhaft sein, Sie können auch ändern, die time_zone parameter.
InformationsquelleAutor zerkms
Ich bin nicht sicher, was Mathematik kann getan werden, in einen DATETIME-Datentyp, aber wenn Sie mit PHP, empfehle ich dringend, mit der integer-basierten Zeitstempeln. Grundsätzlich können Sie speichern eine 4-byte-Ganzzahl in der Datenbank mit der PHP-Funktion time (). Dieser macht tun Mathe auf es viel einfacher.
InformationsquelleAutor TheBuzzSaw