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

spa*_*ack 4 linux date

我在 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"
Run Code Online (Sandbox Code Playgroud)

输出是:

2017-07-23 06:00:00

小时有效,但日期仍与服务器日期匹配。有没有另一种方法来解决这个问题?

kas*_*erd 8

您可以通过TZ在脚本的早期更改环境变量来更改整个脚本的时区。它可以被单个命令覆盖。

例如这个脚本

#!/bin/bash
export TZ=Australia/Sydney

date
TZ=US/Pacific date
date
Run Code Online (Sandbox Code Playgroud)

会输出

Sun 30 Jul 21:56:25 AEST 2017
Sun 30 Jul 04:56:25 PDT 2017
Sun 30 Jul 21:56:25 AEST 2017
Run Code Online (Sandbox Code Playgroud)


小智 3

从字面上看你的问题,如果你只想获取当前区域当前时间晚 7 小时的日期字符串,这很简单:

date -d "7 hours" "+%Y-%m-%d %H:%M:%S"
Run Code Online (Sandbox Code Playgroud)

不过,如果您真正想做的是提取其他时区的本地日期/时间,那么您最好遵循其他一些答案中的建议。