PYTHON:如何在PYTHON 2.7中使用标准库将日期/时间/Tz转换为Epoch



我正在运行python 2.7和标准库的pfSense路由器盒上编写脚本,因此我没有pytz或dateutil模块可以使用,并且strptime模块不支持%z。

我需要将来自另一个服务器(不是本地时间)的日期/时间转换为unix时间戳。

是否有一种方法可以将所需的tz偏移量插入到幼稚的结构化时间中,然后将其转换为GMT?

例如,考虑时间2016/08/14 02:15:10 [-0600/1]MDT来自远程服务器。我的TZ是EDT -0400。

如果值来自我的时区,我可以很容易地这样做:

>>> t=datetime.datetime(2016,8,14,2,15,10).timetuple()
>>> print(t)
time.struct_time(tm_year=2016, tm_mon=8, tm_mday=14, tm_hour=2, tm_min=15, tm_sec=10, tm_wday=6, tm_yday=227, tm_isdst=-1)
>>> ts=time.mktime(t)
>>> print(ts)
1471155310.0

我需要一些方法来进行转换,允许我传递时区偏移量(我需要这样的:time.mktime(t,offset=-21600),但当然它不存在)

我已经硬编码了所有东西,因为我可以很容易地获得值,这是我需要帮助的时间操作逻辑。


我还尝试了以下方法:

In strptime %z不工作

>>> time.strptime("20160814 021510 -0600","%Y%m%d %H%M%S %z")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/_strptime.py", line 478, in _strptime_time
    return _strptime(data_string, format)[0]
  File "/usr/local/lib/python2.7/_strptime.py", line 324, in _strptime
    (bad_directive, format))
ValueError: 'z' is a bad directive in format '%Y%m%d %H%M%S %z'

除非是我的时区,否则连%Z都不起作用。

>>> time.strptime("20160814 021510 MDT","%Y%m%d %H%M%S %Z")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/_strptime.py", line 478, in _strptime_time
    return _strptime(data_string, format)[0]
  File "/usr/local/lib/python2.7/_strptime.py", line 332, in _strptime
    (data_string, format))
ValueError: time data '20160814 021510 MDT' does not match format '%Y%m%d %H%M%S %Z'

但如果在我的时区strptime DOES工作:

>>> time.strptime("20160814 021510 EDT","%Y%m%d %H%M%S %Z")
time.struct_time(tm_year=2016, tm_mon=8, tm_mday=14, tm_hour=2, tm_min=15, tm_sec=10, tm_wday=6, tm_yday=227, tm_isdst=1)

使用%z作为数字时区只支持python 3.x,这里是修复python的2.7

而不是使用:

datetime.strptime(t,'%Y-%m-%dT%H:%M %z')

使用timedelta说明时区,如下所示:

from datetime import datetime,timedelta
def dt_parse(t):
    ret = datetime.strptime(t[0:16],'%Y-%m-%dT%H:%M')
    if t[18]=='+':
        ret+=timedelta(hours=int(t[19:22]),minutes=int(t[23:]))
    elif t[18]=='-':
        ret-=timedelta(hours=int(t[19:22]),minutes=int(t[23:]))
    return ret

相关内容

  • 没有找到相关文章

最新更新