2017-01-30 1 views
0

타임 스탬프가 처리되어야하는 인증 헤더가있는 API를 개발 중입니다. 앞으로 타임 스탬프를 더 사용해야 할 수도 있고 우리가 사용하는 시간대를 일관되게 유지하기 위해 API에 대한 표준 시간대가 있는지 알고 싶습니다. UTC + 0 예를 들면. 어떤 경우에는 사전API에 대한 표준 시간대가 있습니까?

+0

어떤 종류의 API입니까? 특정 형식이 관련되어 있습니까? 공유 할 수있는 사용법 컨텍스트가 있습니까? 우리에게 명확한 예를 들어주세요. –

+0

작업 공석에 대한 데이터가 포함 된 XML 및 JSON 객체를 제공하고 허용하는 RESTful API입니다. 주로 우리 나라에 있지만 때로는 외국에 있습니다. 인증 헤더에서 처리 될 시간 소인은 유닉스이다. 충분한 정보인가? – devKoen1

+0

사실은 아니지만이 분야에 대해 생각해야 할 대부분의 문제를 해결해야하는 오랜 시간이 걸리는 포괄적 인 답변을 작성했습니다. [dst/tz 모범 사례] (http://stackoverflow.com/questions/2532729/daylight-saving-time-and-time-zone-best-practices) 문서도 읽어보십시오. –

답변

1

에서

감사합니다, 당신은 (예 : 표준 Date 헤더 등)이 HTTP 헤더를 찾을 수 RFC5322 형식 (일명 RFC2822, RFC822)에있는 것입니다. 예를 들면 : Date 헤더 Tue, 31 Jan 2017 17:45:00 GMT

, 시간대 약어는 RFC5322 형식이 다른 시간대 가능하더라도 (이 목적 UTC 등가 임) 항상 "GMT"이다.

위의 형식이 실제로 선호되는 것은 아니며, 우리가 붙어있는 것입니다. 당신은 자신의 HTTP 헤더에 대해 원하는 형식을 사용할 수 있습니다.

더 나은 형식은 RFC3339 format입니다. 이는 ISO8601 확장 형식과 유사합니다. 예 : 2017-01-31T17:45:00Z. 끝에있는 Z은 GMT 또는 UTC와 동일한 "줄 루어"시간을 나타냅니다. 그러나, 당신은 또한 미국 태평양 시간대에 해당하는 현지 시간으로 UTC로부터의 오프셋 시간대를 지정할 수 있습니다 : 당신이 1485884700처럼 유닉스 시간에 번호가있는 경우 2017-01-31T09:45:00-08:00

는 시간대는 항상 UTC입니다. 그러나 이것은 사람이 읽을 수 없기 때문에 좋은 교환 형식이 아니며 신기원이나 정밀도가 사용되는 상황에 대한 정보를 제공하지 않습니다. 사람들은 외부에서 그러한 것들을 알아야 할 것입니다. HTTP 헤더 나 XML 또는 JSON에는 적합하지 않습니다.

XML/JSON 요청의 본문에 대해 이야기하는 경우 ISO8601 만 사용해야합니다. 사람들이 사용하는 몇 가지 다른 형식이 있지만 권장하지는 않습니다.

당신이 사용해야하는 시간대는 문맥에 전적으로 달려 있습니다. 타임 스탬프가 인 경우 - 현재 시간을 기록하고 기록하면 실제로 UTC로 작업 할 수 있습니다. 나는 승인 목적으로 생각할 것이고 이것은 합리적 일 것입니다. UTC와 오프셋을 함께 제공하는 한 현지 시간으로 작업 할 수도 있으므로 모호성이 없습니다.

그러나 귀하의 데이터에 구인 정보가 포함되어 있다고 (코멘트에서) 말했습니다. 당신이 미래에 대해 이야기하고있는 것처럼 저에게는 들리 겠지만 그것은 "항상 UTC"규칙의 예외입니다. 앞으로 시간에 대해 이야기 할 때는 언제든지 현지 시간으로으로 표현해야하며, 가능한 가장 직접적인 형식이어야합니다. 또한 시간대의 식별자 (오프셋이 아님)를 제공해야합니다. 적용됩니다. 내가 작업 공석에 대해 이야기하고있는 경우

예를 들어, 나는 내 데이터에 말할 수 있습니다

{ 
    "job": "dishwasher", 
    "available: "2017-02-13", 
    "start": "08:00", 
    "end": "16:00", 
    "tz": "America/New_York" 
} 

이 값은 날짜 만, 시간 만에 대한 ISO8601 형식을 따릅니다 (또는 내가 원하는 경우 것 결합 할 2017-02-13T08:00) - 시간대가 지정되지 않았습니다. 대신 IANA 표준 시간대 식별자 America/New_York (미국 동부 표준시)은 별도의 필드에 제공됩니다.

아마도이 문제는 향후 몇 달 동안 지속될 것입니다.3 월 12 일 미국 동부 표준시가 UTC-5에서 UTC-4로 변경됩니다. 따라서 하나의 오프셋을 지정할 수 없으며 UTC를 사용할 수도 없습니다.

또한 단일 국가의 경우에도 일부 국가에서는 표준 시간대와 DST 규칙에 대한 생각을 계속 변경하기 때문에 매년 tz database에 대한 업데이트가 수십 가지입니다. 미래의 날짜와 시간에 대한 오프셋을 계산한다면, 그 오프셋이 정부에 의해 변경되었음을 알 수 있습니다.

+0

그래서 API에 대한 시간대 규칙은 GMT (== UTC + 1)입니다. 노력과 답변에 감사드립니다. – devKoen1

+0

아니요 - 어떻게 대답했는지 모르겠습니다. 그리니치 표준시 == UTC + 1이 아닌 UTC - 컨벤션 방식에는 별다른 이견이 없습니다. 나는 당신의 상황에 적용될 수있는 다른 맥락의 예를 들었다. –

관련 문제