Frage

Gibt es eine Möglichkeit in MySQL die für jede Zeitzone Offset zu berechnen? Um zum Beispiel die lokale Zeit in der Zeitzone Asia/calcutta zu bekommen. Was ich tun möchte, ist die für diese Zeitzone Offset zu berechnen und fügen hinzu, dass zeitzonen die lokale Zeit zu erhalten.

War es hilfreich?

Lösung

Wenn Sie wollen, dass der Versatz von einer Zeitzone berechnen wie America / Vancouver von UTC Sie können es wie folgt:

SELECT (unix_timestamp() -  unix_timestamp(convert_tz(now(), 'Etc/UTC', 'America/Vancouver'))) / 3600   as offset;

Damit dies funktioniert, müssen Sie zuerst die Zeitzoneninformationen in mysql laden müssen, wie hier beschrieben: http://dev.mysql.com/doc/refman/5.0/en/mysql-tzinfo-to-sql.html

Andere Tipps

SELECT TIMESTAMPDIFF(HOUR, UTC_TIMESTAMP(), NOW());

Wenn die Zeitzone des Servers ist PST diese -8 zurückkehren wird.

SELECT TIMESTAMPDIFF(SECOND, NOW(), UTC_TIMESTAMP());

Fügen Sie das Ergebnis der oben auf jedem Unix-Zeitstempel, wenn Sie es MySQL Datetime vergleichen möchten.

Der Versatz von der Zeit abhängen, die Sie interessiert sind - zum Beispiel, würde ich zur Zeit ein von einer Stunde von UTC versetzt, aber im Winter meinen würde Null-Offset sein

.

Gemessen an der docs Seite auf MySQL Zeitzonen-Unterstützung Sie die convert_tz Funktion. Wenn Sie versuchen, UTC zu Ortszeit konvertieren, übergeben Sie in „Etc / GMT + 0“ als „von“ Zeitzone und „Asien / Kalkutta“ als die „nach“.

SELECT TIME_FORMAT(TIMEDIFF(NOW(), CONVERT_TZ(NOW(), 'Asia/Calcutta', 'UTC')), '%H:%i') AS offset;

Geben

+--------+
| offset |
+--------+
|  05:30 |
+--------+

gemischt I @ColinM und @Kenneth Spencers Antworten auf, weil ich den Offset einer beliebigen Zeitzone in Stunden wanted:

TIMESTAMPDIFF(HOUR, UTC_TIMESTAMP(), CONVERT_TZ(UTC_TIMESTAMP(), "UTC", "America/Denver"))

-

SELECT ROUND(TIMESTAMPDIFF(MINUTE, UTC_TIMESTAMP(), CONVERT_TZ(UTC_TIMESTAMP(), "Etc/UTC", "Asia/Kolkata"))/60,1)

Wie Kenneth wies darauf hin, Sie werden die Zeitzone info laden müssen: http://dev.mysql.com/doc/refman/5.0/en/mysql-tzinfo-to-sql.html

Aber dann kann man lustige Dinge tun wie auf einmal den Offset für mehrere Zeitzonen finden:

SELECT Name,
TIMESTAMPDIFF(HOUR, UTC_TIMESTAMP(), CONVERT_TZ(UTC_TIMESTAMP(), "Etc/UTC", Name)) as Offset
FROM mysql.time_zone_name 
WHERE (Name IN ('America/Vancouver', 'Etc/UTC', 'America/Denver'))

Giving:

+-------------------+--------+
| Name              | Offset |
+-------------------+--------+
| America/Denver    |     -6 |
| America/Vancouver |     -7 |
| Etc/UTC           |      0 |
+-------------------+--------+
DATEDIFF(NOW(), UTC_TIMESTAMP())
SET time_zone = '-07:00';

Sie können nur passieren in einem Offset

http://dev.mysql.com /doc/refman/5.1/en/time-zone-support.html

Ich frage mich, ob @ ColinM Antwort oben sicher ist. Ist es die Uhr ein- oder zweimal gelesen haben? Gibt es eine Möglichkeit, dass UTC_TIMESTAMP () und NOW () außer einer Sekunde liegen könnte? Ich weiß nicht, aber dies würde das vermeiden.

SET @now = now();
SET @utc = CONVERT_TZ(@now, 'SYSTEM', '+00:00');
SELECT TIMESTAMPDIFF(MINUTE, @utc, @now);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top