Ubuntu 20.04 및 CentOS 7에서 "어제"(1일 전으로 이해됨)에 해당하는 날짜 문자열을 얻으려고 합니다. 지금까지는 존재하지 않는 시간대(예: )를 성공적으로 사용하고 aaa
24시간 오프셋을 적용했습니다. 즉, 내가 실행하려는 명령은 다음과 같습니다.
YESTERDAY=`TZ=aaa24 date '+%y%m%d'`
날짜가 내 시간대에 맞지 않는다는 사실을 깨닫기 전까지는 괜찮습니다.
올바른 시간대(저의 경우 유럽/로마)를 적용하려고 했지만 제대로 작동하지 않았습니다. 더 구체적으로:
TZ="Europe/Rome" date "+%Y%m%d %H:%M %Z"
20210208 08:25 CET
TZ="Europe/Rome24" date "+%Y%m%d %H:%M %Z"
20210208 07:25 Europe
마지막 명령에 노출된 시간대는 시간대를 올바르게 이해하지 못하는 것처럼 들리거나 오프셋을 무시하고 GMT와 동기화되는 것으로 보이는 기본 "유럽" 시간대를 사용하는 것 같습니다.
"하위 영역"을 제거하여 몇 가지 시도를 시도했는데 /Rome
이 경우 시간대 오프셋이 올바르게 이해된 것 같습니다.
TZ="Europe" date "+%Y%m%d %H:%M %Z"
20210208 07:25 Europe
TZ="Europe24" date "+%Y%m%d %H:%M %Z"
20210207 07:25 Europe
유럽/로마와 같은 특정 "하위" 시간대에 오프셋을 적용하는 방법이 있습니까? 감사해요.
답변1
Ubuntu와 CentOS는 모두 GNU Date를 사용하므로 다음 -d
옵션을 사용하십시오.
$ date "+%Y%m%d %H:%M %Z"
20210209 10:09 EST
$ date -d "yesterday" "+%Y%m%d %H:%M %Z"
20210208 10:09 EST
date
매개변수를 구문 분석하는 방법에 대한 자세한 내용은 다음을 -d
참조하세요 info date
(또는온라인)
참고로 시간이 이상합니다. 특히 일광 절약 시간제: 쿠바에서는 올해(2021년) 3월 14일 자정에 일광 절약 시간 전환이 발생합니다.그 자정은 존재하지 않았어:
$ env TZ=America/Havana date -d '2021-03-14'
date: invalid date ‘2021-03-14’
# but
$ env TZ=America/Havana date -d '2021-03-14 01:00:00'
Sun Mar 14 01:00:00 CDT 2021
일 단위의 날짜 연산은 시간 단위의 날짜 연산과 다를 수 있습니다. 3월 15일로 이동한 다음 시간을 거꾸로 돌려보겠습니다.
$ env TZ=America/Havana date -d '2021-03-15' '+%Y-%m-%d'
2021-03-15
$ env TZ=America/Havana date -d '2021-03-15 -1 day' '+%Y-%m-%d'
2021-03-14
$ env TZ=America/Havana date -d '2021-03-15 -24 hours' '+%Y-%m-%d'
2021-03-13
왜 그런 겁니까? 2021년 3월 14일 쿠바에는 23시간이 있으므로 24시간을 빼면 1일 1시간이 됩니다.
$ env TZ=America/Havana date -d '2021-03-15' '+%Y-%m-%d %T'
2021-03-15 00:00:00
$ env TZ=America/Havana date -d '2021-03-15 -1 day' '+%Y-%m-%d %T'
2021-03-14 01:00:00
$ env TZ=America/Havana date -d '2021-03-15 -24 hours' '+%Y-%m-%d %T'
2021-03-13 23:00:00
이는 쿠바에만 국한되지 않습니다. 일광 절약 시간을 준수하는 모든 시간대는 시계가 앞으로 이동하는 날에 적용됩니다.
답변2
시간대를 사용하여 이 작업을 수행하는 방법을 모르지만 24시간 전 날짜는 다음과 같이 표시될 수 있습니다.
date -d @$(($(date +%s)-24*3600))
이는 현재 날짜를 1970년 이후의 초 수로 표현한 date +%s
다음 24시간을 뺍니다. date -d
현재 날짜는 표시되지 않지만, 다음 문자열로 정의된 날짜가 표시됩니다.