![如何在 bash 脚本中更改时区?](https://linux22.com/image/9931/%E5%A6%82%E4%BD%95%E5%9C%A8%20bash%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%9B%B4%E6%94%B9%E6%97%B6%E5%8C%BA%EF%BC%9F.png)
我正在 Linux Ubuntu 上工作,我想要一个 bash 脚本,其输出是从我的服务器时间提前 7 小时转换时区。
我的服务器时间:
2017 年 7 月 23 日星期一 23:00:00
我想要实现的目标:
2017 年 7 月 24 日星期一 06:00:00
我在我的 bash 脚本中尝试过这个:
#!/bin/bash
let var=$(date +%H)*3600+$(date +%M)*60+$(date +%S)
seven=25200
time=$(($var+$seven))
date=$(date --date='TZ="UTC+7"' "+%Y-%m-%d")
hours=$(date -d@$time -u +%H:%M:%S)
echo "$date" "$hours"
输出是:
2017-07-23 06:00:00
时间有效,但日期仍然与服务器日期匹配。还有其他方法可以解决这个问题吗?
答案1
TZ
您可以通过在脚本早期更改环境变量来更改整个脚本的时区。它可以在单个命令上被覆盖。
例如这个脚本
#!/bin/bash
export TZ=Australia/Sydney
date
TZ=US/Pacific date
date
会输出
Sun 30 Jul 21:56:25 AEST 2017
Sun 30 Jul 04:56:25 PDT 2017
Sun 30 Jul 21:56:25 AEST 2017
答案2
从字面上看你的问题,如果你只想获取当前区域当前时间晚 7 小时的日期字符串,这很简单:
date -d "7 hours" "+%Y-%m-%d %H:%M:%S"
不过,如果您真正想做的是提取其他时区的本地日期/时间,那么您最好遵循其他一些答案中的建议。
答案3
您看过 中的引用部分吗man bash
?
我相信类似的东西
DATE=$( date --date="TZ=\"Asia/Taipei\" $TIME" +%F\ %H:%M )
就是您正在寻找的。有人可以帮我附议吗?