서버가 동부 시간대로 설정되어 있습니다. 내 작업 중 일부는 해당 시간대와 관련되어 있고 일부는 호주/애들레이드 시간대와 관련되어 있습니다.
$ DATE=`date`
$ echo $DATE
Mon Mon Jun 4 15:15:47 EDT 2018
$ DATE_Adelaide=`TZ=Australia/Adelaide date -d "$DATE"`
$ echo $DATE_Adelaide
Tue Jun 5 04:45:47 ACST 2018
$ dayName=$(date -d "${DATE_Adelaide}" +%a)
date: invalid date `Tue Jun 5 04:45:47 ACST 2018'
답변1
ISO8601 날짜/시간 형식을 범용 전송 형식으로 사용하여 GNU 날짜를 가정하면 다음과 같습니다.
$ date_local=$(date --iso-8601=seconds)
$ echo "$date_local"
2018-06-04T17:01:45-04:00
$ date_adelaide=$(TZ=Australia/Adelaide date -d "$date_local" --iso-8601=seconds)
$ echo "$date_adelaide"
2018-06-05T06:31:45+09:30
$ day_name_local=$(date -d "$date_adelaide" +%a)
$ echo $day_name_local
Mon
$ day_name_adelaide=$(TZ=Australia/Adelaide date -d "$date_adelaide" +%a)
$ echo $day_name_adelaide
Tue
답변2
내 시스템에서 날짜를 호주/애들레이드 시간대로 변환한 다음 후속 "날짜" 명령에서 변환된 날짜를 사용하려고 하면 내 시스템의 무언가로 인해 ACST가 올바르게 해석되지 않습니다. 내 솔루션은 원하는 시간대로 변환하면서 날짜의 형식화된 부분을 출력하는 것이었습니다. DATE=$(날짜) $ echo $DATE 2018년 6월 5일 화요일 14:13:03 EDT $ TZ=호주/애들레이드 날짜 -d "$DATE" 6월 6일 수요일 03:43:03 ACST 2018 $ dayName=$ (TZ= 호주/애들레이드 날짜-d "$DATE" +%a) $ dayofmonth=$(TZ=호주/애들레이드 날짜-d "$DATE" +%d) $ dayofweek=$(TZ =호주/애들레이드 날짜-d "$ DATE" +%w) $ 시간=$(TZ=호주/애들레이드 날짜-d "$DATE" +%H) $ 분=$(TZ=호주 /애들레이드 날짜 -d "$DATE" +%M) echo $ dayName $dayofmonth $dayofweek $hour$분 수요일 06 3 03 43