문제

MySQL에 시간대의 오프셋을 계산하는 방법이 있습니까? 예를 들어, 시간대에 현지 시간을 얻으려면 Asia/calcutta. 내가하고 싶은 것은이 시간대의 오프셋을 계산하고 해당 오프셋을 GMT에 추가하여 현지 시간을 얻는 것입니다.

도움이 되었습니까?

해결책

UTC의 America/Vancouver와 같은 시간대의 오프셋을 계산하려면 다음과 같이 할 수 있습니다.

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

이것이 작동하려면 먼저 여기에 설명 된대로 시간대 정보를 MySQL에로드해야합니다. http://dev.mysql.com/doc/refman/en/mysql-tzinfo-to-sql.html

다른 팁

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

서버의 시간대가 PST 인 경우 반환됩니다. -8.

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

MySQL DateTimes와 비교하려면 위의 결과를 UNIX 타임 스탬프에 추가하십시오.

오프셋은 관심있는 시간에 따라 다릅니다. 예를 들어, 현재 UTC에서 1 시간의 오프셋이 있지만 겨울에는 오프셋이 0이됩니다.

판단 MySQL 시간대 지원의 문서 페이지, 당신은 사용하고 싶습니다 convert_tz 기능. UTC를 현지 시간으로 변환하려는 경우 "etc/gmt+0"을 "Time Zone에서", "Asia/Calcutta"를 "to"로 통과하십시오.

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

기부

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

나는 몇 시간 만에 임의의 시간대의 오프셋을 원했기 때문에 @colinm과 @kenneth spencer의 답변을 혼합했습니다.

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)

Kenneth가 지적했듯이 시간대 정보를로드해야합니다. http://dev.mysql.com/doc/refman/en/mysql-tzinfo-to-sql.html

그러나 여러 타임 존에 대한 오프셋을 한 번에 찾는 것과 같은 재미있는 일을 할 수 있습니다.

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'))

기부:

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

오프셋으로 전달할 수 있습니다

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

위의 @Colinm의 답변이 안전한지 궁금합니다. 시계를 한두 번 읽습니까? UTC_TIMESTAMP ()와 이제 ()가 1 초 간격 할 수있는 가능성이 있습니까? 모르겠지만 이것은 그것을 피할 것입니다.

SET @now = now();
SET @utc = CONVERT_TZ(@now, 'SYSTEM', '+00:00');
SELECT TIMESTAMPDIFF(MINUTE, @utc, @now);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top