如何在Linux上的shell脚本中将UTC转换为本地时间

时间:2011-07-22 09:28:29

标签: linux shell date utc

我有一个格式

的字符串
20110724T080000Z

我希望在Linux上的shell脚本中将其转换为本地时间。我认为我可以直接将其作为输入,但我似乎无法告诉日期输入日期的格式。

date -d "20110724T080000Z" -u

会让日期抱怨

date: invalid date `20110724T080000Z'

另外,表格“20110724T080000Z”的格式是什么?我试图谷歌获得它没什么成功。

4 个答案:

答案 0 :(得分:3)

对于合并的日期和时间,ISO8601 "basic format"date似乎无法解析20110724T080000Z,但如果您准备进行一些字符串替换,则会正确解析20110724 08:00:00Z

答案 1 :(得分:1)

它被称为祖鲁时间。它与UCT相同,后者曾被称为GMT。它与军方一起用于指定UCT,因此对应性没有混淆。

http://en.wikipedia.org/wiki/Date_(Unix

此命令应该根据维基百科:

date [-u | --utc | --universal] [mmddHHMM [[cc] yy] [[。SS]]此表单唯一有效的选项指定协调世界时。

答案 2 :(得分:1)

date程序可以识别yyyy-mm-ddTHH:MM:SS(以及yyyy-mm-dd HH:MM:SS),因此:

a=20110724T080000Z
b=${a:0:4}-${a:4:2}-${a:6:5}:${a:11:2}:${a:13:2}
date +%F_%T -d "${b} +0"

将在我的语言环境中打印2011-07-24_12:30:00

答案 3 :(得分:0)

您可以尝试利用perl:

  

perl -e'print scalar localtime(shift),“\ n”'20110724T080000Z

虽然你可能需要稍微调整一下才能让它正常工作。好吧,我不知道为什么perl版本不能很好地完成它,但是这里有一个我试过的Ruby版本,虽然我不能很好地选择时间:

  

ruby​​ -e“require'date'; print Date.strptime('20110724T080000Z','%Y%m%dT%H%M%SZ')。ctime”

给出:

  

Sun Jul 24 00:00:00 2011