我在使用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小时,而我需要针对特定目标时区实现此目标,而无需依赖手动指定偏移量。
答案 0 :(得分: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
的{{1}}选项告诉它从指定的字符串中读取时间。
如果您没有指定date
,您将获得计算机的默认时区:
TZ
按国家/地区列出的时区列表为here。
此方法不适用于$ date -d 'Sat Mar 15 01:30:01 UTC 2014'
Fri Mar 14 18:30:01 PDT 2014
执行其他操作的Mac OSX (BSD) version of date。
答案 1 :(得分: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
计算。我们可以使用此datetime
delta
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