2015-01-06 17 views
0

我写了一个脚本来读取类型为'Tue Nov 18 19:23:17 2014'的ASCII格式的日期,并将其转换为绘图的十进制日期。我的两行代码有效,但看起来很复杂。我无法直接找到一个库函数来做这件事,我想我一定会错过一些东西;应该有一种简洁的方式来做到这一点。任何建议?简明的ASCII日期到十进制日期

import time, datetime 
from matplotlib import dates 
b = time.strptime('Tue Nov 18 19:23:17 2014') 
d = dates.date2num(datetime.datetime(b[0],b[1],b[2],b[3],b[4],b[5])) 
print d 
#this code results in 735555.807836 

#Simplified code incorporating suggestion by Toni_W 
from matplotlib import dates 
from dateutil.parser import parse 
dates.date2num(parse('Tue Nov 18 19:23:17 2014')) 
+0

您可以使用一个公式直接从'time'去'float',但它肯定赢不要简洁。 –

+0

你如何处理时区?或者你的输入是否被认为是UTC? – ghoti

+0

@Toni_W,谢谢:基本上我的代码被简化为一行:dates.date2num(parse('Tue Nov 18 19:23:17 2014')) – gciriani

回答

1

这不是你需要的吗?

Parsing datetime in Python..?

由于@TimPietzcker建议,在dateutil包是要走的路,它 正确和自动处理的前3种格式:

>>> from dateutil.parser import parse 
>>> parse("Fri Sep 25 18:09:49 -0500 2009") 
datetime.datetime(2009, 9, 25, 18, 9, 49, tzinfo=tzoffset(None, -18000)) 
>>> parse("2008-06-29T00:42:18.000Z") 
datetime.datetime(2008, 6, 29, 0, 42, 18, tzinfo=tzutc()) 
>>> parse("2011-07-16T21:46:39Z") 
datetime.datetime(2011, 7, 16, 21, 46, 39, tzinfo=tzutc()) 

似乎希克的unixtime格式但幸运的是标准 datetime.datetime是为任务:

>>> from datetime import datetime 
>>> datetime.utcfromtimestamp(float("1294989360")) 
datetime.datetime(2011, 1, 14, 7, 16) 

这是相当容易使一个功能出了这是处理所有4 格式:

from dateutil.parser import parse 
from datetime import datetime 

def parse_time(s): 
    try: 
     ret = parse(s) 
    except ValueError: 
     ret = datetime.utcfromtimestamp(s) 
    return ret 
相关问题