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
来解析这些日期,然后加上或减去偏移量。
不过,我在想,能不能直接用Bash
和date
来完成这个任务。我尝试过像这样增加或减少日期:
date -d 'Sat Mar 15 01:30:01 UTC 2014 2 hours'
但是,上面的做法会把指定的日期转换成我系统的日期,并加上2个小时,而我其实是想针对特定的时区来处理,而不想手动指定偏移量。
2 个回答
1
对于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')
delta
是通过 timedelta
计算出来的。我们可以用这个 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
1
我建议不要使用偏移量的方法,而是直接指定你想要的时区。例如,如果你想把一个日期转换成香港时间,可以使用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
是时区的变量。-d
这个选项告诉date
命令要从指定的字符串中读取时间。
如果你不指定TZ
,那么它会使用你电脑的默认时区:
$ date -d 'Sat Mar 15 01:30:01 UTC 2014'
Fri Mar 14 18:30:01 PDT 2014
关于各国时区的列表可以在这里找到。
这种方法不适用于Mac OSX (BSD)版本的date,因为在这个版本中,-d
的功能是不同的。