2017-04-04 1 views
1

나는 상당한 양의 연구를 해왔으며 시간이 흐르면서 프로그래밍에 대한 아이디어를 처음 접했습니다.향후 이벤트에 순간 표준 시간대를 사용하려면 어떻게해야합니까?

로컬 시간에 모임을 예약 할 수 있어야하는 응용 프로그램이 있습니다. 따라서 "2017 년 12 월 23 일 샌프란시스코에서 오전 9시에"라고 말할 수 있습니다. 이벤트 위치는 시간의 관점입니다. 다른 문제이지만 관련성이있는 재발 수도 있습니다.

이벤트를 만들 때 미래 이벤트를 UTC에 저장하면 안됩니다. 나는 내가 필요 믿습니다

  1. 로컬 날짜 시간
  2. UTC의이 Europe/London 아마도

는 그러나, 나는 로컬 Moment Timezone 모두를 사용하려는 올슨 데이터베이스 ID를

  • 오프셋 및 서버 부분에 .

    이 라이브러리를 사용합니다. 그게 내 전망을 어떻게 바꾸나요? 더 이상 일광 절약 시간에 대해 걱정할 필요가 없다는 의미입니까? "2017/12/12 09:00"이라고 말하면 전 세계 시간대에 맞게 현지 시간으로 정확하게 바꿀 수 있습니까?

    그래서 정말 필요한 모든은 다음과 같습니다 (? ISOString으로)

    1. 로컬 시간 및 날짜
    2. 올슨 시간대 ID.

    나중에 서버에서 이벤트 1 시간 전에 푸시 알림을 보내려고합니다. 이 2 가지 속성 (및 순간 표준 시간대)은 제가 다룰 수 있습니까?

  • 답변

    3

    당신은 아주 쉽게 순간 시간대 안정적으로 현지 시간으로 변환 할 수 있습니다 :

    var original = moment.tz('2017-12-23T09:00:00', 'America/Los_Angeles'); 
    
    var easternUS = original.clone().tz('America/New_York'); 
    var centralEU = original.clone().tz('Europe/Berlin'); 
    var westAUS = original.clone().tz('Australia/Perth'); 
    var japan = original.clone().tz('Asia/Tokyo'); 
    // etc. 
    

    (사용 .format(...) 원하는 출력 문자열을 생성 할 수 있습니다.)

    을 당신은 쉽게 시간 한 시간 계산할 수 있습니다 이전의 모멘트 함수로 초기에.

    var earlierUTC = original.clone().utc().subtract(1, 'hour'); 
    var earlierEastern = easternUS.clone().subtract(1, 'hour'); 
    

    예, 당신이 볼 수 있듯이, 당신은 저장 할 필요가 2017-12-23T09:00:00America/Los_Angeles입니다.

    하나는 2017-12-23T09:00:00-08:00 등의 오프셋으로 이벤트 시간을 저장하는 것이 좋습니다,하지만 당신은 거기에 몇 가지 문제로 실행 : 이벤트가 매달 다시 발생

    • 경우는 어떻게? 3 월에 DST가 시작되면 현지 시간을 오전 9 시로 유지하고 오프셋을 -7로 변경할지 또는 원래 의도가 현지 시간을 이동시키는 등가 UTC 시간 (17 : 00Z)인지 여부를 결정해야합니다 ~ 10am.

    • 정치인이 이벤트가 발생하기 전에 시간대 또는 DST 규칙을 변경하면 어떻게 될까요? 올해 캘리포니아에서는 그렇지 않을 것으로 보이지만, 글로벌 차원에서 약간의 규칙 성을 갖고 단기간에 발생합니다. 내 블로그 게시물 On the Timing of Time Zone Changes을 참조하십시오.캘리포니아에서도 - 여름에 열리는 연례 행사 였지만, like this one 법안이 통과되었다고 말하면 오프셋이 잘못 될 수 있습니다.

    생각해 봐야 할 점이 하나 있습니다. 이벤트 현지 시간이 유효하지 않거나 모호한 경우 어떻게합니까?

    • 유효하지 않은 시간은 스프링 전달 전환에서 발생합니다. 예를 들어, 시계는 1시 59 분에서 3 시로 이동하지만 2시 30 분의 이벤트 시간을가집니다. 단일 이벤트에서는 가능하지 않지만 반복되는 이벤트에서는 쉽게 발생할 수 있습니다. 어떻게 처리할지 결정해야하지만 확실하지 않으면 현지 시간을 격차만큼 앞당길 것을 제안합니다. 그래서 이벤트는 그 날 3시 30 분에있을 것이고, 다음 발생시 2시 30 분으로 돌아갈 것입니다.

    • 불투명 한 시간은 폴백 전환에서 발생합니다. 예를 들어 시계는 1:59에서 1:00로 이동합니다. 이벤트가 1:30에 실행되면 첫 번째 인스턴스에서 실행할지, 두 번째 인스턴스에서 실행할지 또는 둘 다에서 실행할지 결정해야합니다. 대부분의 경우 첫 번째 인스턴스 (표준 시간이 아닌 일광 절약 시간)로 실행하는 것이 좋습니다.

      이벤트가 실제로 한 번만 실행되고 폴백 전환 중에있을 수있는 경우 이벤트 시간을 UTC 또는 오프셋이있는 로컬 시간으로 기록하여 명확하게하는 것이 좋습니다. 앞서 언급 한대로 표준 시간대 규칙의 변경 사항을 조심하십시오. 당신이 그것에 대해 걱정할 필요가 없습니다 - 당신이 이탈 할 이유가없는 있도록

    순간-시간대가 자동으로 그 변환하는 동안 위의 제안을 적용합니다.

    +0

    감사합니다 매트, 그리고 여기있는 동안 지난 며칠 동안 읽은이 주제에 대해 다른 답변을 보내 주셔서 감사합니다! – Clark

    관련 문제