반응형

참고주소 : https://dev.to/paulasantamaria/change-the-timezone-on-a-heroku-app-2b4

Heroku 앱에서 타임 존(time zone) 변경하기

저는 몇 주 전에 Heroku를 발경하였습니다. 특히 제 팀이 원격으로 개발 환경을 사용하는 무료 플랜이 있기 때문에 당신의 앱을 배포하는 멋진 플랫폼입니다.

최근 저는 새로운 프로젝트 작업을 시작했습니다. 이 특별한 프로젝트에서 주요 연산의 대부분은 날짜와 관련되어 있습니다. 앱은 프론트 엔드를 Angular 5로 만들었고 백 엔드는 Node.js로 만들었습니다.

모든 것은 제 로컬 환경에서 완벽히 작동하였지만 제가 Heroku로 배포하였을 때 모든 날짜 연산은 임의로 작동하기 시작하였습니다.(스포일러: 랜덤은 아닙니다)

여기에 방법이 있습니다. 저는 아르헨티나 출신이고, 로컬 서버에서 배포된 프론트 엔드가 있지만 백엔드는 Heroku에 있고 새로운 Heroku 앱의 기본 지역은 "미국(us)" 이었습니다. 기본적으로 제 프론트 엔드와 백 엔드는 다른 타임 존 이었습니다.

운이 좋게도 Heroku는 우리에게 새로운 설정 변수를 추가함으로서 우리의 앱의 타임 존을 변경할 수 있도록 합니다.

Heroku CLI에서

  1. 명령어 shell을 엽니다.
  2. Heroku로 로그인 합니다.
  3. 당신의 앱 디렉터리를 찻습니다.
  4. 다음처럼 TZ를 설정합니다.
heroku config:add TZ="America/Argentina/Buenos_Aires"

Heroku dashboard(web)에서

  1. 브라우저에서 Heroku dashboard로 로그인 합니다.
  2. 앱을 찻습니다.
  3. Settings 탭을 클릭합니다.
  4. "Reveal Config Vars" 버튼을 누릅니다.
  5. "TZ"를 키로 설정하고 타입 존의 값(예:America/Argentina/Buenos_Aires)을 설정합니다.
  6. Add(추가) 버튼을 누릅니다.

올바른 TZ값인지 어떻게 알 수 있나요

다음 링크에서 타임 존의 전체 목록을 확인할 수 있습니다.

새로운 TZ 값 확인하기

Heroku CLI에서 새로운 설정 변수의 값을 다음 명령어로 확인할 수 있습니다.

heroku config:get TZ

Heroku에 대한 더 많은 정보

Heroku가 무엇입니까?

Heroku 설정 변수에 대한 더 많은 정보

설정 변수

반응형
반응형

출처 : https://stackoverflow.com/questions/5537876/get-utc-offset-from-time-zone-name-in-python

Python에서 시간대(timezone) 이름으로 UTC 시차(offset) 구하기

Python에서 시간대(timezone) 이름으로 UTC 시차(offset)을 어떻게 구합니까?

예시: 저는 Asia/Jerusalem을 통해 +0200을 얻고 싶습니다.


미국동부시간으로 한국 시간 구하기 예시

import datetime
import pytz

est = datetime.datetime.now(pytz.timezone('America/New_York'))
diff_min = (est.utcoffset().seconds - 86400) // 60 - 540
# ...중략...
# 02:38:00 28.02.20
svr_time = datetime.datetime.strptime(svr_str, "%H:%M:%S %d.%m.%y") - datetime.timedelta(minutes=diff_min)

3개의 답변 중 2개의 답변만 추려냄

pytz 프로젝트와 utcoffset 메소드 사용을 시도하신 적 있으신가요?

예시

>>> import datetime
>>> import pytz
>>> pacific_now = datetime.datetime.now(pytz.timezone('US/Pacific'))
>>> pacific_now.utcoffset().total_seconds()/60/60
-7.0

DST(일광절약시간, 서머타임) 때문에 결과는 그 해의 시간에 따라 다릅니다.

import datetime, pytz

datetime.datetime.now(pytz.timezone('Asia/Jerusalem')).strftime('%z')

# returns '+0300' ('now' 지금은 DST(일광절약시간, 서머타임)이기 때문입니다)

pytz.timezone('Asia/Jerusalem').localize(datetime.datetime(2011,1,1)).strftime('%z')

# returns '+0200' (1월에는 DST(일광절약시간, 서머타임)이 아니기 때문입니다)
반응형
반응형

출처
https://stackoverflow.com/questions/19074552/converting-utc-to-a-different-time-zone-in-php

PHP에서 UTC 시간 대를 다른 시간 대로 변환하기

저는 UTC 시간대를 다른 시간대로 변환하기 위해 아래의 메소드를 사용하였습니다. 하지만 아래의 메소드는 UTC 시간을 리턴하는 것으로 보입니다. 제가 사용한 메소드에 잘못된 것이 무엇인지 충분히 알려주실 수 있으신가요?

static function formatDateMerchantTimeZone($t, $tz) {
   if (isset($t)) {
       return date('Y-m-d H:i:s', strtotime($t , $tz));
   } else {
       return null;
   }
}

$t는 제가 전달한 datetime입니다.
$tz는 America/Los_Angeles와 같은 시간대 입니다.


4개의 답변 중 2개의 답변

많은 사람들이 DateTime 클래스를 인지하지 못하거나 사용하지 않는다는 사실에 놀랐습니다. DateTime 클래스는 이와 같은 작업을 거의 사소하게 만듭니다.

함수에 전달하는 날짜 문자열이 UTC 시간대에 있다고 가정했습니다.

function formatDateMerchantTimeZone($t, $tz)
{
    $date = new \DateTime($t, new \DateTimeZone('UTC'));
    $date->setTimezone(new \DateTimeZone($tz));
    return $date->format('Y-m-d H:i:s');
}

작동 확인


다음을 시도해보세요.

<?php
/**    초 단위로 origin 시간대에서 remote 시간대의 offset을 리턴합니다..
*    @param $remote_tz;
*    @param $origin_tz; null 이면 서버의 현재 시간대가 origin 으로 사용됩니다.
*    @return int;
*/
function get_timezone_offset($remote_tz, $origin_tz = null) {
    if($origin_tz === null) {
        if(!is_string($origin_tz = date_default_timezone_get())) {
            return false; // UTC 타임스탬프가 반환되었습니다 -- 탈출!
        }
    }
    $origin_dtz = new DateTimeZone($origin_tz);
    $remote_dtz = new DateTimeZone($remote_tz);
    $origin_dt = new DateTime("now", $origin_dtz);
    $remote_dt = new DateTime("now", $remote_dtz);
    $offset = $origin_dtz->getOffset($origin_dt) - $remote_dtz->getOffset($remote_dt);
    return $offset;
}
?>
사용예시:
<?php
// 이는 10800을 리턴합니다 (3시간) ...
$offset = get_timezone_offset('America/Los_Angeles','America/New_York');
// 또는 이미 서버 시간이 'America/New_York'로 설정되어 있다면...
$offset = get_timezone_offset('America/Los_Angeles');
// $offset 값을 취해서 당신의 timestamp 값을 조절할 수 있습니다.
$offset_time = time() + $offset;
?>
반응형

+ Recent posts