Linux 使用Bash和GNU工具将GMT时间戳转换为本地时间

Linux 使用Bash和GNU工具将GMT时间戳转换为本地时间,linux,bash,Linux,Bash,我正在将结果发送到一个日志文件,其中包含以下行: date: Sat, 12 Dec 2020 22:33:34 GMT 如果可能的话,我只想在我的Ubuntu Linux机器上使用Bash和GNU工具将其转换为我的本地时间“东部”或密歇根/底特律。即使在夏令时,或者超过/在午夜之前,它也应该工作。我希望结果以通用格式存储在变量中,例如2020年12月1日的2020-12-01。一个变量代表军事时间,一个变量代表日期可能是最好的。我可以计算“Sat/Sun/Mon/etc”,而且可能根本不需要

我正在将结果发送到一个日志文件,其中包含以下行:

date: Sat, 12 Dec 2020 22:33:34 GMT
如果可能的话,我只想在我的Ubuntu Linux机器上使用Bash和GNU工具将其转换为我的本地时间“东部”或密歇根/底特律。即使在夏令时,或者超过/在午夜之前,它也应该工作。我希望结果以通用格式存储在变量中,例如2020年12月1日的2020-12-01。一个变量代表军事时间,一个变量代表日期可能是最好的。我可以计算“Sat/Sun/Mon/etc”,而且可能根本不需要

我希望“cut”命令可以分离出不同的字段,但是如何处理GMT呢

#!/bin/bash

datime="date: Sat, 12 Dec 2020 22:33:34 GMT"

#magic happens

echo dalocaltime is $dalocaltime and dalocaldate is $dalocaldate
结果:

dalocaltime is 14:20:33 and dalocaldate is 2020-01-30

这对我很有用,但我无法解释
${datime}
部分

datime="date: Sat, 12 Dec 2020 22:33:34 GMT"
dalocaltime=$(date -d "${datime#* }" '+%R')
dalocaldate=$(date -d "${datime#* }" '+%Y-%m-%d')
echo dalocaltime is $dalocaltime and dalocaldate is $dalocaldate

试试
date-d“${datime#*}”+%R'
,剩下的应该不难理解。这确实让我找到了答案。令人惊讶的是,我不需要使用任何TZ的东西,它只是把字符串的方式,我有它。GNU日期确实是一个了不起的程序
${datime#*}
datime
的值中删除以空格结尾的最短前缀(即在本例中为
date:
)。这是一个简单的方法,它会在第一个空格中修剪文本。