Bash:从文件中读取UTC时间戳,并转换为不同目标时区的本地时间



我在使用bash date生成的文件中有UTC时间戳,如下所示:

'Sat Mar 15 01:30:01 UTC 2014'
'Sat Mar 15 01:30:16 UTC 2014'
'Sat Mar 15 02:00:01 UTC 2014'
'Sat Mar 15 02:00:12 UTC 2014'

我需要将时间戳转换为不同地区的本地时间。例如,将上面的第一个条目转换为香港时间,第二个转换为新加坡时间等等。我可以生成可以添加的偏移量,以获得当地时间。所以我的偏移量如下:

2:00
-5:00
 .
 .

一种可能的方法可以是使用Python解析日期,然后加/减偏移量。

然而,我想知道我是否可以在Bashdate中更好地做到这一点。我尝试过增加/减少日期,例如:

date -d 'Sat Mar 15 01:30:01 UTC 2014 2 hours'

然而,上面的操作会将指定的日期转换为我的系统日期并增加2小时,而我需要在特定的目标时区实现这一点,而不必手动指定偏移量。

我会避免偏移方法,直接指定目标时区。例如,使用GNU date:将日期转换为香港时间

$ TZ='Asia/Hong_Kong' date -d 'Sat Mar 15 01:30:01 UTC 2014'
Sat Mar 15 09:30:01 HKT 2014

TZ是时区变量。date-d选项告诉它从指定字符串中读取时间。

如果您不指定TZ,您将获得计算机的默认时区:

$ date -d 'Sat Mar 15 01:30:01 UTC 2014'
Fri Mar 14 18:30:01 PDT 2014

这里列出了按国家/地区划分的时区。

这种方法不适用于-d做其他事情的Mac OSX(BSD)版本的日期。

对于Python

In [1]: import datetime
In [2]: utcstring = 'Sat Mar 15 01:30:01 UTC 2014'
In [3]: offsetstring = '2:00'

现在解析两个字符串

In [4]: utc = datetime.datetime.strptime(utcstring, '%a %b %d %H:%M:%S %Z %Y')
In [5]: offset = datetime.datetime.strptime(offsetstring, '%H:%M')

CCD_ 11由CCD_。我们可以用这个delta 加/减datetime

In [6]: delta = datetime.timedelta(hours=offset.hour, minutes=offset.minute)

让我们检查一下结果。

In [7]: utc + delta
Out[7]: datetime.datetime(2014, 3, 15, 3, 30, 1)

这可以转换为string作为

In [9]: datetime.datetime.strftime(utc + delta, '%a %b %d %H:%M:%S %Y')
Out[9]: 'Sat Mar 15 03:30:01 2014'

有关更多详细信息,请参阅:https://docs.python.org/2.7/library/datetime.html

最新更新