2016-05-29 91 views
0

我有两个字符串像这样的:处理在strptime时区在Python

"Sun 10 May 2015 13:54:36 -0700" 
"Sun 10 May 2015 13:54:36 +0000" 

(最后一部分是时区-0700意味着比GMT少7小时)
我的目的是把它转化为一个UNIX时间戳很容易找到它们的绝对差异。

我的问题是有一种内置的方法将这些格式化文本转换为Unix时间戳?还是有一个直接计算两个这样的字符串的差异?

编辑: 该课题从This one不同,因为这个问题不包括时区并没有回答有关时区的这个问题提到任何东西任何。

+0

@schwobaseggl我找不到我在答案中的答案你提到过,因为没有人告诉过有关时区的任何事情:-( – FazeL

+2

http://stackoverflow.com/questions/1101508/how-to-parse-dates-with-0400-timezone-string-in-python ? – schwobaseggl

+0

@schwobaseggl dateutil看起来很完美,但它没有与python标准库捆绑在一起,我会正确编辑问题。 – FazeL

回答

0

这应该在Python 3的工作以上但不&已知在所有平台上工作有关Python 2.

date_str = "Sun 10 May 2015 13:54:36 -0700" 
pattern = '%a %d %B %Y %H:%M:%S %z' 
dt = int(time.mktime(time.strptime(date_str ,pattern))) 
print(dt) 

对于,Python的2.7+,(无%z

import datetime 
date_str = "Sun 10 May 2015 13:54:36 -0700" 

dt_str = date_str[:-5].strip() 
dt_zone = int(date_str[-5:])/100 
pattern = '%a %d %B %Y %H:%M:%S' 

dtobj = datetime.datetime.strptime(dt_str ,pattern) 
dt = dtobj + datetime.timedelta(hours=dt_zone) 
print(dt.strftime('%s')) 
+0

@Fazel没有工作? – Vishwa

+0

Python 2解决方案不适用于带小数小时偏移量的时区。 –

+0

此外,你还有一个额外的地带 –

0

此代码回答你的问题:

from datetime import timedelta, datetime, tzinfo 
date1="Sun 10 May 2015 13:54:36 -0700" 

date2=date1[4:-6] 

zone = int(date1[-5:])/100 

d=datetime.strptime(date2, "%d %B %Y %H:%M:%S") 

class TZ(tzinfo): 
    def utcoffset(self, dt): return timedelta(hours=zone) 

d=datetime(d.year, d.month, d.day,d.hour,d.minute,d.second, tzinfo=TZ()).isoformat(' ') 


print d 
+0

即使它工作,编码国际海事组织是非常可疑的,包括丢弃原始偏移的分钟和使用全局变量作为默认值的方法.. – martineau

+0

什么正在编码IMO –

+1

在我看来。另一个答案也有类似的问题。 – martineau