我目前正在尝试将以下格式的日期YYYYmmddHHMMSS转换为unix时间戳,但是我收到错误(ValueError:year超出范围)。
import datetime
def ts(date):
return datetime.datetime.fromtimestamp(date).strftime('%Y%m%d%H%M%S')
if __name__ == "__main__":
date = 20130814100000
print ts(date)
答案 0 :(得分:5)
您的日期应该是一个字符串。这是你如何做到的。 (如果您的日期是整数,那么只需date = str(date)
。
>>> import time
>>> from datetime import datetime
>>> date = '20130814100000'
>>> dt = datetime.strptime(date, '%Y%m%d%H%M%S')
>>> print dt
2013-08-14 10:00:00
>>> print time.mktime(dt.timetuple())
1376467200.0
time
也有一个strptime
函数,但它返回一个不太有用的struct_time
对象。但是如果你只需要一个unix时间,那么你也可以使用它:
>>> time.mktime(time.strptime(date, '%Y%m%d%H%M%S'))
1376467200.0
答案 1 :(得分:4)
我认为这里的问题是.fromtimestamp()
期待一个Unix时间戳,而不是格式化为YYYYmmdd的日期......
要解析您在那里所拥有的日期信息,我建议您使用.strptime()
或优秀的python-dateutil
套餐。
import datetime
def ts(date):
stamp = datetime.datetime.strptime(date, '%Y%m%d%H%M%S')
return stamp.strftime('%Y%m%d%H%M%S')
或
from dateutil.parser import parse
def ts(date):
stamp = parse(date)
return stamp.strftime('%Y%m%d%H%M%S')
答案 2 :(得分:2)
strptime
,而不是strftime
(格式化时间)。总的来说,您的代码应如下所示:
import datetime
def ts(date):
return datetime.datetime.strptime(date, '%Y%m%d%H%M%S')
if __name__ == "__main__":
date = "20130814100000"
print ts(date)
答案 3 :(得分:0)
您似乎对表示时间的不同方式感到困惑。您分配给date
的值似乎已经是“2013-08-14 10:00:00”的格式化时间字符串,但您将其传递到fromtimestamp
。这个函数需要一个Unix时间戳,它只是1970年1月1日午夜以来经过的秒数。
我相信你正在寻找的东西是这样的:
import datetime
def ts(datestr):
return datetime.datetime.strptime(datestr, "%Y%m%d%H%M%S")
if __name__ == "__main__":
date = 20130814100000
print ts(date)
strftime
就像你将格式化次成为字符串一样。 strptime
用于解析字符串。