programing

올바른 JSON 날짜 형식은 무엇입니까?

goodsources 2023. 1. 3. 21:48
반응형

올바른 JSON 날짜 형식은 무엇입니까?

JSON 날짜 형식에 대한 다양한 표준을 봐왔습니다.

"\"\\/Date(1335205592410)\\/\""         .NET JavaScriptSerializer
"\"\\/Date(1335205592410-0500)\\/\""    .NET DataContractJsonSerializer
"2012-04-23T18:25:43.511Z"              JavaScript built-in JSON object
"2012-04-21T18:25:43-05:00"             ISO 8601

어느 것이 맞습니까?아니면 최선일까요?여기에 어떤 기준이 있나요?

JSON 자체는 날짜를 표시하는 방법을 지정하지 않지만 JavaScript는 표시합니다.

의 메서드에서 출력된 형식을 사용해야 합니다.

2012-04-23T18:25:43.511Z

이유는 다음과 같습니다.

  1. 사람이 읽을 수 있지만 간결하기도 하다.

  2. 올바르게 정렬됩니다.

  3. 여기에는 시간순서 재확립에 도움이 되는 분수초가 포함됩니다.

  4. ISO 8601을 준수합니다.

  5. ISO 8601은 10년 이상 국제적으로 확립되어 있습니다.

  6. ISO 8601은 W3C, RFC3339XKCD에 의해 보증됩니다.

, 지금까지 작성된 모든 날짜 라이브러리는 "1970년 이후 밀리초"를 이해할 수 있습니다.휴대하기 쉽도록 하기 위해 Steal Master가 적합합니다.

JSON은 날짜에 대해 아무것도 모른다..NET의 기능은 비표준 해킹/확장입니다.

변환할 수 형식으로 .Date에 전달할 수 있는 오브젝트 등 JavaScript 내의 오브젝트.가장 쉽고 아마도 가장 이식성이 높은 형식은 1970년 이후 밀리초가 포함된 타임스탬프입니다.

올바른 형식이 없습니다.JSON 사양에는 날짜를 교환하는 형식이 지정되어 있지 않기 때문에 다양한 방법이 있습니다.

가장 좋은 형식은 ISO 8601 형식(Wikipedia 참조)으로 표현되는 날짜입니다. 잘 알려져 있고 널리 사용되는 형식이며 다양한 언어로 처리되므로 상호 운용성에 매우 적합합니다.생성된 json을 제어할 수 있는 경우, 예를 들어 json 형식으로 다른 시스템에 데이터를 제공하는 경우 날짜 교환 형식으로 8601을 선택하는 것이 좋습니다.

생성된 json을 제어할 수 없는 경우(예를 들어 여러 기존 시스템에서 json을 사용하는 경우) 이를 처리하는 가장 좋은 방법은 예상되는 다양한 형식을 처리하는 날짜 구문 분석 유틸리티 함수를 사용하는 것입니다.

RFC 7493(I-JSON 메시지 형식)에서:

I-JSON은 Internet JSON 또는 Interoperable JSON 중 하나를 나타냅니다.

프로토콜에는 타임스탬프 또는 시간 지속 시간을 포함하도록 설계된 데이터 항목이 포함되어 있는 경우가 많습니다.이러한 모든 데이터 항목은 RFC 3339에 규정되어 있듯이 ISO 8601 형식으로 문자열 값으로 표시할 것을 권장합니다.단, 시간대는 소문자가 아닌 대문자를 사용해야 하며, 타임존은 기본값이 아니며, 옵션의 후행 초는 값이 "00"인 경우에도 포함할 것을 권장합니다.또, 시간을 포함한 모든 데이터 항목은, RFC 3339의 부록 A 의 「기간」에 준거하는 것을 추천합니다.단, 같은 추가 제약이 있습니다.

확실하지 않은 경우 최신 브라우저의 Javascript 웹 콘솔(CtrlShiftKFirefox의 경우 +)을 눌러 다음과 같이 입력합니다.

new Date().toISOString()

유언 출력:

'2019-07-04T13:33:03.969Z'

짜잔!!

참고로 사용하는 형식은 다음과 같습니다.

Date.UTC(2017,2,22)

JSONP로 동작합니다.JSONP는 에 의해 지원됩니다.$.getJSON()이법 、 추천 、 르르르.........사람들이 이런 식으로 하기 때문에 가능성으로 그냥 던져버려요.

FWIW: 통신 프로토콜에서는 epoch 이후 초를 사용하지 마십시오.Epoch 이후 밀리초도 사용하지 마십시오.이는 윤초의 랜덤화 구현으로 인해 위험이 따르기 때문입니다(송신측과 수신측 모두 UTC 윤초를 적절하게 구현하고 있는지 알 수 없습니다).

애완동물의 혐오감 같은 것이지만, 많은 사람들은 UTC가 GMT의 새로운 이름일 뿐이라고 믿고 있습니다. 틀렸습니다!시스템에 윤초가 실장되어 있지 않은 경우는 GMT(잘못되어도 UTC라고 불리는 경우가 많음)를 사용하고 있습니다.윤초를 완전하게 실장했을 경우는, 실제로 UTC 를 사용하고 있습니다.미래의 윤초는 알 수 없습니다.필요에 따라 IERS에 의해 발행되며 지속적인 갱신이 필요합니다.윤초를 실장하려고 하지만 오래된 참조 테이블이 포함되어 있는 시스템(생각보다 더 일반)을 실행하고 있는 경우 GMT도 UTC도 없는 경우 UTC인 것처럼 가장한 시스템이 있습니다.

이러한 날짜 카운터는 분해 형식(y, m, d 등)으로 표시되는 경우에만 호환됩니다.Epoch 형식에서는 호환성이 없습니다.명심하세요.

"2014-01-01T23:28:56.782Z"

날짜는 UTC 시간(Z로 표시)을 나타내는 표준 정렬 가능한 형식으로 표시됩니다.ISO 8601은 또한 Z를 시간대 오프셋에 대해 + 또는 – 값으로 대체하여 시간대를 지원합니다.

"2014-02-01T09:28:56.321-10:00"

ISO 8601 사양에는 다른 종류의 타임존 인코딩이 있지만 -10:00 형식이 현재 JSON 파서가 지원하는 유일한 TZ 형식입니다.일반적으로 UTC 기반 형식(Z)을 사용하는 것이 가장 좋습니다.단, 날짜가 생성된 시간대를 특정할 필요가 없는 경우(서버 측 생성에서만 가능).

주의:

    var date = new Date();
    console.log(date); // Wed Jan 01 2014 13:28:56 GMT- 
    1000 (Hawaiian Standard Time) 
        
    var json = JSON.stringify(date);
    console.log(json);  // "2014-01-01T23:28:56.782Z"

JavaScript에는 표준 포맷이 없지만 이 방법이 권장됩니다.

// JSON encoded date
var json = "\"2014-01-01T23:28:56.782Z\"";

var dateStr = JSON.parse(json);  
console.log(dateStr); // 2014-01-01T23:28:56.782Z

JSON 자체에는 날짜 형식이 없기 때문에 누가 어떻게 날짜를 저장하든 상관없습니다. 이 있기 jSON에 을 알고 합니다. 돼요.JSON.stringify 그리고 은 메서드를 사용합니다.Date.prototype.toJSON에서는, 「Default」는 「Default」로, 「Default에서는, 「이러다」가 로 사용됩니다.Date.prototype.toISOString(Date.toJSON의 MDN):

const json = JSON.stringify(new Date());
const parsed = JSON.parse(json); //2015-10-26T07:46:36.611Z
const date = new Date(parsed); // Back to date object

'아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아reviver「」JSON.parse(JSON.parse의 MDN) JSON 문자열을 읽을 때마다 ISO 문자열을 javascript 날짜로 자동 변환합니다.

const isoDatePattern = new RegExp(/\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z)/);

const obj = {
 a: 'foo',
 b: new Date(1500000000000) // Fri Jul 14 2017, etc...
}
const json = JSON.stringify(obj);

// Convert back, use reviver function:
const parsed = JSON.parse(json, (key, value) => {
    if (typeof value === 'string' &&  value.match(isoDatePattern)){
        return new Date(value); // isostring, so cast to js date
    }
    return value; // leave any other value as-is
});
console.log(parsed.b); // // Fri Jul 14 2017, etc...

은 ""를 사용하는 입니다.2018-04-23T18:25:43.511Z

다음 그림은 이 방법을 선호하는 이유를 보여줍니다.

JSON 날짜

다테에는 인 다테가 있습니다.toJSON 그게...return할 수 .Date 다시... 다시...

Sharepoint 2013에서는 JSON에서 데이터를 가져올 때 날짜를 날짜 전용 형식으로 변환하는 형식이 없습니다. 해당 날짜는 ISO 형식이어야 하기 때문입니다.

yourDate.substring(0,10)

이것은 당신에게 도움이 될 것이다.

범용 상호 운용성을 위한 최선의 형식은 ISO-8601 문자열이 아니라 EJSON에서 사용되는 형식이라고 생각합니다.

{ "myDateField": { "$date" : <ms-since-epoch> } }

아래 설명과 같이 https://docs.meteor.com/api/ejson.html

혜택들

  1. 해석 성능:날짜를 ISO-8601 문자열로 저장할 경우 해당 필드에 날짜 값이 있을 것으로 예상되지만 컨텍스트 없이 값 유형을 결정해야 하는 시스템이 있는 경우 모든 문자열을 구문 분석하여 날짜 형식을 지정합니다.
  2. 날짜 확인 불필요:날짜 확인 및 확인에 대해 걱정할 필요가 없습니다.문자열이 ISO-8601 형식과 일치하더라도 실제 날짜가 아닐 수 있습니다.EJSON 날짜에서는 이 문제가 발생할 수 없습니다.
  3. 명확한 유형 선언: 범용 데이터 시스템에 관한 한 ISO 문자열을 문자열로 저장하고 실제 시스템 날짜를 다른 케이스로 저장하는 경우 ISO-8601 문자열 형식을 채택한 범용 시스템에서는 기계적으로 이를 허용하지 않습니다(탈옥 속임수 또는 유사한 끔찍한 솔루션이 없으면).

결론

사람이 읽을 수 있는 형식(ISO-8601 문자열)은 사용 사례의 80%에 더 유용하고 편리합니다. 응용 프로그램에서 날짜를 이해하는 경우 ISO-8601 문자열로 저장하지 말라는 지시를 받을 필요가 없습니다. 그러나 일반적으로 받아들여지는 전송 형식에서는 날짜를 확실하게 보장해야 합니다.어떻게 하면 애매모호함과 많은 검증의 필요성을 허용할 수 있을까요?

parse server와 함께 작업합니다.

{
    "ContractID": "203-17-DC0101-00003-10011",
    "Supplier":"Sample Co., Ltd",
    "Value":12345.80,
    "Curency":"USD",
    "StartDate": {
                "__type": "Date",
                "iso": "2017-08-22T06:11:00.000Z"
            }
}

이에 대한 정답은 1개뿐이며 대부분의 시스템이 잘못 알고 있습니다.에폭 이후의 시간(밀리초). 64비트 정수라고도 합니다.표준 시간대는 UI 문제이며 애플리케이션 계층 또는 DB 계층에 비즈니스가 없습니다.64비트 정수로 저장되는 것을 알고 변환 계산을 수행할 때 db가 표준 시간대를 신경 쓰는 이유는 무엇입니까?

관련 없는 비트를 제거하고 UI까지 날짜만 숫자로 처리합니다.간단한 산술 연산자를 사용하여 쿼리 및 로직을 수행할 수 있습니다.

다음 코드가 나에게 효과가 있었다.이 코드는 날짜를 DD-MM-YYY 형식으로 인쇄합니다.

DateValue=DateValue.substring(6,8)+"-"+DateValue.substring(4,6)+"-"+DateValue.substring(0,4);

그 이외의 경우는, 다음의 것도 사용할 수 있습니다.

DateValue=DateValue.substring(0,4)+"-"+DateValue.substring(4,6)+"-"+DateValue.substring(6,8);

그것은 사용 사례에 따라 다르다고 생각합니다.대부분의 경우 다음과 같이 날짜를 문자열로 렌더링하는 대신 적절한 개체 모델을 사용하는 것이 더 좋습니다.

{
"person" :
      {
 "name" : {
   "first": "Tom",
   "middle": "M",
  ...
}
 "dob" :  {
         "year": 2012,
         "month": 4,
         "day": 23,
         "hour": 18,
         "minute": 25,
         "second": 43,
         "timeZone": "America/New_York"
    }   
   }
}

이는 RFC 3339보다 상세하지만 다음과 같습니다.

  • 사람이 읽을 수도 있다
  • 적절한 오브젝트 모델을 구현합니다(OOP에서와 같이 JSON이 허용하는 한).
  • 타임 존을 서포트하고 있습니다(특정 날짜와 시각의 UTC 오프셋뿐만이 아닙니다).
  • 밀리초, 나노초, ..., 또는 단순히 분수초와 같은 작은 단위를 지원할 수 있습니다.
  • (날짜 시간 문자열을 해석하기 위해) 별도의 해석 단계가 필요하지 않습니다.JSON 파서는 모든 작업을 수행합니다.
  • 모든 날짜의 프레임워크 또는 모든 언어로 구현하여 쉽게 작성 가능
  • 다른 달력 척도(Hebrew, 중국어, 이슬람...) 및 시대(AD, BC, ...)를 지원하기 위해 쉽게 확장할 수 있습니다.
  • 10000년 안전합니다;-) (RFC 3339는 안전하지 않습니다)
  • 하루 종일 날짜와 부동 시간을 지원합니다(Javascript의Date.toJSON()하지 않다)

정확한 정렬(RFC 3339의 funroll에 기재된 바와 같이)은 JSON에 날짜를 시리얼화할 때 꼭 필요한 기능은 아니라고 생각합니다.또한 이는 동일한 시간대 오프셋을 가진 날짜에만 해당됩니다.

언급URL : https://stackoverflow.com/questions/10286204/what-is-the-right-json-date-format

반응형