服务器设置为东部时区。我的一些任务与该时区相关,一些任务与澳大利亚/阿德莱德时区相关。
$ 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
假设 GNU 日期,使用 ISO8601 日期时间格式作为通用传输格式:
$ 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=$(date) $ echo $DATE Tue Jun 5 14:13:03 EDT 2018 $ TZ=澳大利亚/阿德莱德 date -d "$DATE" Wed Jun 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 $小时 $分钟 星期三 06 3 03 43