Centos는 NodeJS에서 1905년 이하의 모든 날짜에 대해 잘못된 날짜 시간을 제공합니다.

Centos는 NodeJS에서 1905년 이하의 모든 날짜에 대해 잘못된 날짜 시간을 제공합니다.

이상한 상황이 발생했습니다. 최근에는 Azure 클라우드에서 Digital Ocean 서버로 이동했습니다. 저는 Nodejs 버전 v10.15.0과 Centos 7을 사용하고 있습니다.

내 timedatectl 출력은 다음과 같습니다.

[deploy@prod-ca-api install-scripts]$ timedatectl
Local time: Tue 2019-03-19 15:34:21 IST
Universal time: Tue 2019-03-19 10:04:21 UTC
RTC time: Tue 2019-03-19 10:04:21
Time zone: Asia/Kolkata (IST, +0530)
NTP enabled: no
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
[deploy@prod-ca-api install-scripts]$ 

하루의 시작 시간을 설정하여 날짜를 출력하면 현재 날짜에 대한 적절한 출력이 제공됩니다. 그러나 1900년 이하의 날짜에 대해서는 24분 차이로 동일하게 응답합니다.

내 시간대 설정은 IST(+5.30)입니다.

[deploy@prod-ca-api install-scripts]$ date
Tue Mar 19 15:36:57 IST 2019
[deploy@prod-ca-api install-scripts]$ node
> let a = new Date()
undefined
> a.setHours(0,0,0,0)
1552933800000
> a
2019-03-18T18:30:00.000Z
> a = new Date('1700-01-01')
1700-01-01T00:00:00.000Z
> a.setHours(0,0,0,0)
-8520357208000
> a
1699-12-31T18:06:32.000Z

이전에는 Azure 서버 1699-12-31T18:30:00.000Z에서1699-12-31T18:06:32.000Z

답변1

사실 적절한 시간은 18:06이 되어야 한다고 생각합니다. 나는 이 글을 읽고 다음과 같은 결론을 내렸다.https://www.dailyo.in/variety/indian-standard-time-time-zones-bagan-time/story/1/17080.html

이 기사의 관련 부분은 다음과 같습니다.

인도와 이웃 스리랑카에서 스리랑카 표준시라고 부르는 인도 표준시는 UTC+05:30의 오프셋을 갖습니다.

이는 명확하고 이해하기 쉽습니다.

인도에는 1906년까지 공식적인 시간대가 없었습니다. 봄베이, 캘커타, 마드라스라는 세 개의 대통령직이 있었고, 세 도시의 경도상 위치에 따라 세 개의 현지 시간이 있었습니다. 이렇게 생성된 세 개의 시간대 뒤에는 그 주변 및 근처의 모든 주 또는 도시가 이어졌습니다.

이것이 흥미로워지는 곳입니다. 인도에는 1906년 1월 1일까지 공식 시간대가 없었던 것 같습니다. 이는 귀하의 경험적 연구와 일치합니다.

캘커타는 UTC+05.54로 설정되어 현재 IST의 +00:24가 됩니다.

이것은 NodeJS의 이상한 동작을 설명합니다. 다시 한 번 귀하의 연구와 일치합니다.

이 역사에는 더 많은 내용이 있지만 어쨌든 나는 이 두 경우 모두 시간이 정확할 수 있다고 결론을 내립니다. 전체 시간대가 존재하지 않았기 때문에 이러한 오래된 날짜의 정확한 시간을 결정하는 것은 매우 어렵습니다. 일반적으로 오래된 날짜를 신뢰해서는 안 됩니다. 시간대가 매우 혼란스러울 수 있고 국가가 다른 달력을 사용했을 수도 있기 때문입니다. 또한 예를 들어 1600년대의 날짜를 사용하는 현실적인 사용 사례도 없습니다.

관련 정보