복붙노트

[SQL] 현지 시간대에 저장된 UTC 시간을 변환 MySQL을 할 수 있습니까?

SQL

현지 시간대에 저장된 UTC 시간을 변환 MySQL을 할 수 있습니까?

직접 정상 select 문에 현지 시간대 시간에 저장된 UTC 시간을 변환 MySQL을 할 수 있습니까?

하자 당신은 타임 스탬프 (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`)
)

그런 때

"select value, date from SomeDateTable";

나는 물론 그 저장 UTC 형태로 모든 날짜를 얻을.

그러나하자, 나는 (DST과) 다른 시간대에서 그들을하고 싶은 말 그때 나는 모든 날짜가 선택한 시간대에 백업 할 수 있도록 선택 쿼리에 어떤 마법을 추가 할 수 있습니까?

"select value, TIMEZONE(date, "Europe/Berlin") from SomeDateTable";

아니면 내가 어떤 PHP 코드처럼, 위에 다른 레이어에서이 작업을 수행해야합니다? (대부분의 사람들이이 문제를 해결 한 방법이 될 것 같습니다).

당신의 MySQL 설치 당신이 그것을 매우 깨끗한 솔루션입니다 CONVERT_TZ을 사용할 수 있도록 허용하는 경우, 이 예제 프로그램은 사용 방법.

SELECT CONVERT_TZ( '2010-01-01 12:00', 'UTC', 'Europe/Stockholm' )

이 일부 MySQL의 설치, 관리와 사용이 기능이 누락되어 있기 때문에 좋은 방법입니다 경우 모르겠어요.

해결법

  1. ==============================

    1.그래의 CONVERT_TZ 기능이있다.

    그래의 CONVERT_TZ 기능이있다.

  2. ==============================

    2.당신은 또한이 같은 숫자 오프셋 (offset) 기능을 사용할 수 있습니다 "미국 / 덴버"또는 "GMT"와 같은 인간 친화적 인 시간대 이름을 사용하는 (예를 들면 인해 SUPER 접근의 부족) MySQL의 환경을 구성 할 수없는 사람들을 위해 :

    당신은 또한이 같은 숫자 오프셋 (offset) 기능을 사용할 수 있습니다 "미국 / 덴버"또는 "GMT"와 같은 인간 친화적 인 시간대 이름을 사용하는 (예를 들면 인해 SUPER 접근의 부족) MySQL의 환경을 구성 할 수없는 사람들을 위해 :

    CONVERT_TZ(date,'+00:00','-07:00')
    
  3. ==============================

    3.

    select convert_tz(now(),@@session.time_zone,'+03:00')
    

    시간을 얻을 경우에만 사용

    time(convert_tz(now(),@@session.time_zone,'+03:00'))
    
  4. ==============================

    4.하나는 쉽게 사용할 수 있습니다

    하나는 쉽게 사용할 수 있습니다

    CONVERT_TZ(your_timestamp_column_name, 'UTC', 'your_desired_timezone_name')
    

    예를 들면 :

    CONVERT_TZ(timeperiod, 'UTC', 'Asia/Karachi')
    

    게다가 이것은 또한 문 및 타임 스탬프를 비교 내가 어디 절에 다음을 사용 WHERE에서 사용할 수 있습니다 :

    WHERE CONVERT_TZ(timeperiod, 'UTC', '{$this->timezone}') NOT BETWEEN {$timeperiods['today_start']} AND {$timeperiods['today_end']}
    
  5. ==============================

    5.내가 사용하는 제안

    내가 사용하는 제안

    SET time_zone = 'proper timezone';
    

    데이터베이스에 연결 한 후 바로 한 번 수행된다. 를 선택할 때이 후 모든 타임 스탬프가 자동으로 변환됩니다.

  6. ==============================

    6.나는 확실히 어떤 수학은 DATETIME 데이터 유형에 할 수 있지 않다, 그러나 당신이 PHP를 사용하는 경우, 나는 강하게 정수 기반의 타임 스탬프를 사용하는 것이 좋습니다. 기본적으로, 당신은 PHP의 시간 () 함수를 사용하여 데이터베이스에서 4 바이트 정수를 저장할 수 있습니다. 이것은에 수학을하고 훨씬 더 간단합니다.

    나는 확실히 어떤 수학은 DATETIME 데이터 유형에 할 수 있지 않다, 그러나 당신이 PHP를 사용하는 경우, 나는 강하게 정수 기반의 타임 스탬프를 사용하는 것이 좋습니다. 기본적으로, 당신은 PHP의 시간 () 함수를 사용하여 데이터베이스에서 4 바이트 정수를 저장할 수 있습니다. 이것은에 수학을하고 훨씬 더 간단합니다.

  7. from https://stackoverflow.com/questions/2187593/can-mysql-convert-a-stored-utc-time-to-local-timezone by cc-by-sa and MIT license