Python 2.7 PYTHON:如何使用标准库在Python2.7中将日期/时间/时间转换为历元

Python 2.7 PYTHON:如何使用标准库在Python2.7中将日期/时间/时间转换为历元,python-2.7,datetime,timezone,utc,Python 2.7,Datetime,Timezone,Utc,我正在运行python 2.7和标准库的pfSense路由器盒上编写脚本,因此我没有pytz或dateutil模块可供使用,并且strTime模块不支持%z 我需要将来自另一台服务器(不是本地时间)的日期/时间转换为unix时间戳 是否有一种方法可以将所需的tz偏移插入到一个简单的结构化时间中,然后将其转换为GMT 例如,考虑来自远程服务器的时间2016/08/14 02/15:10[-0600/1 ] MDT。我的TZ是EDT-0400 如果值来自我的时区,我可以轻松地执行以下操作: >

我正在运行python 2.7和标准库的pfSense路由器盒上编写脚本,因此我没有pytz或dateutil模块可供使用,并且strTime模块不支持%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
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
我需要某种方法来进行转换,以允许我通过一个时区(我需要类似于:time.mktime(t,offset=-21600)的东西,但它当然不存在)

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


我还尝试了以下方法:

在strtime中%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'
>>> 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'

只有
python3.x
才支持对数字时区使用
%z
,这里是python
2.7

而不是使用:

datetime.strptime(t,'%Y-%m-%dT%H:%M %z')
使用
timedelta
计算时区,如下所示:

>>> 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
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

只有
python3.x
才支持对数字时区使用
%z
,这里是python
2.7

而不是使用:

datetime.strptime(t,'%Y-%m-%dT%H:%M %z')
使用
timedelta
计算时区,如下所示:

>>> 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
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

请说清楚一点。你有什么输入,你想要什么输出?举例说明。展示一些你尝试过的代码。另外,记住“epoch”是一个英语单词,意思是“一个时期的开始”。你在这里的用法是一个常见的错误。您可能指的是“Unix时间戳”,它使用Unix纪元(1970-01-01T00:00:00Z)作为基础。术语“epoch timestamp”毫无意义,因为作为epoch的唯一时间戳是
0
。请更清楚。你有什么输入,你想要什么输出?举例说明。展示一些你尝试过的代码。另外,记住“epoch”是一个英语单词,意思是“一个时期的开始”。你在这里的用法是一个常见的错误。您可能指的是“Unix时间戳”,它使用Unix纪元(1970-01-01T00:00:00Z)作为基础。术语“epoch timestamp”毫无意义,因为作为epoch的唯一时间戳是
0