如何在 bash 脚本中更改时区?

如何在 bash 脚本中更改时区?

我正在 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 ) 就是您正在寻找的。有人可以帮我附议吗?

相关内容