GMT 타임스탬프를 기준으로 날짜 신기원 시간을 계산해야 하는데 현지 시간이 해당 시간대에 속하지 않습니다. 현재 현지 시간은 CEST입니다.
그래서 에포크 시간을 계산하려고 하면
date -d "2017-08-05 10:10:10" "+%s"
알겠어요
1501927810
하지만 주어진 시간은 GMT이므로 결과는 다음과 같습니다.
1501927810
현지 시간과 GMT 사이의 시차를 수동으로 추가하려고 합니다.
date -d "2017-08-05 10:10:10 +2 hours" "+%F %T"
하지만 이것은 나에게 준다
2017-08-05 11:10:10
+1시간만 추가된 이유! ?
답변1
date
환경 변수를 설정하여 사용할 GMT 시간대를 지정할 수 있습니다 TZ
.
$ TZ=GMT date -d "2017-08-05 10:10:10" "+%s"
1501927810
그렇지 않으면 날짜 문자열을 GMT(2가 아닌 +0시간)로 지정해야 합니다.
$ date -d "2017-08-05 10:10:10 +0" "+%s"
1501927810
답변2
원래 날짜의 알려진 시간대를 날짜 문자열에 추가할 수 있습니다.
date -d "2017-08-05 10:10:10 GMT" +%s
1501927810
date -d "2017-08-05 10:10:10 PST" +%s
1501956610
다른 답변에서 언급했듯이 일광 절약 시간제의 변경 사항도 고려해야 하며 이는 GMT
실제로 원하는 시간대가 아닐 수도 있습니다.
다음 형식을 사용할 수도 있습니다.
date --date 'TZ="Europe/London" 2017-08-05 10:10:10' +%s
1501924210
이는 환경 변수를 설정하는 것과는 다르며 , 에포크 타임스탬프를 사용할 때는 환경 변수를 사용하는 것이 작동하지 않는다는 TZ
점에 유의해야 합니다 .TZ
echo "TODAY: $(TZ=UTC date) : $(TZ=UTC date '+%s') YESTERDAY: $(TZ=UTC+24 date) $(TZ=UTC+24 date '+%s')"
TODAY: Fri Oct 15 21:57:12 UTC 2021 : 1634335032 YESTERDAY: Thu Oct 14 21:57:12 UTC 2021 1634335032
날짜는 정확하지만 에포크 타임스탬프는 동일합니다.
이것은 작동합니다:
echo "TODAY: $(date) : $(date '+%s') YESTERDAY: $(date -d '24 hours ago') $(date -d '24 hours ago' '+%s')"
TODAY: Fri Oct 15 23:05:03 IST 2021 : 1634335503 YESTERDAY: Thu Oct 14 23:05:03 IST 2021 1634249103
이는 에포크 타임스탬프가 단순히 특정 날짜 이후의 초 수이므로 시간대의 영향을 받지 않기 때문입니다. 이는 어느 시간대에 있든 마찬가지입니다.
따라서 다른 시간대에서 특정 날짜의 에포크 타임스탬프를 원하는 경우 다음과 같이 사용할 수 있습니다.
date -d "$(TZ=PST date)" +%s
이미 날짜 문자열이 있고 그 문자열이 다른 시간대에 속해 있다는 것을 알고 있으며 이를 에포크 타임스탬프로 만들고 싶다면 TZ
환경 변수를 사용해도 작동하지 않습니다.
TZ=GMT date -d "2017-08-05 10:10:10" "+%s"
1501927810
다음과 동일한 타임스탬프를 생성합니다.
TZ=PST date -d "2017-08-05 10:10:10" "+%s"
1501927810
답변3
타임스탬프가 UTC 형식인 경우 date
다음 옵션을 사용하여 UTC 사용을 나타낼 수 있습니다 -u
.
-u
,--utc
,--universal
UTC(협정 세계시) 인쇄 또는 설정
답변4
GMT는 여름과 겨울 사이에 1시간의 시차가 있는 시간대(영국, 포르투갈 등)를 설명하는 데 자주 사용됩니다. 8월에 영국은 GMT+1로 전환되지만, 연중 해당 기간의 레이블은 BST임에도 불구하고 시간대는 여전히 GMT로 설명되는 경우가 많습니다. 시간대는 date
"Europe/London"으로 기록됩니다. (원래 시간대는 날짜 정의에 선언되어 있습니다. 설정을 통해 표시할 대상 시간대를 선택할 수 있습니다.TZ
외부명령은 date
일반적인 방법으로 환경 변수로 사용됩니다. )
date --date 'TZ="Europe/London" 2017-08-05 10:10:10'
다른 맥락에서 GMT는 UTC와 거의 동일한 불변성을 설명하는 데 사용됩니다. 여기서 시간대는 간단히 "GMT"로 지정됩니다.
date --date 'TZ="GMT" 2017-08-05 10:10:10'
타임스탬프가 해당하는 데이터 소스에 따라 다르며, 8월에는 한 시간 간격이 되기 때문에 이는 중요합니다.