0

我目前正在尝试将以下格式 YYYYmmddHHMMSS 的日期转换为 unix 时间戳,但出现错误(ValueError:年份超出范围)。

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

4 回答 4

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
于 2013-08-14T12:18:51.073 回答
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')

http://labix.org/python-dateutil

于 2013-08-14T12:18:44.333 回答
2
  • 解析日期时间的函数称为strptime,而不是strftime(格式化时间)。
  • 20130814100000不是UNIX时间戳
  • strptime 将字符串作为参数

总体而言,您的代码应如下所示:

import datetime

def ts(date):
    return datetime.datetime.strptime(date, '%Y%m%d%H%M%S')

if __name__ == "__main__":
    date = "20130814100000"
    print ts(date)
于 2013-08-14T12:20:06.893 回答
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用于将字符串解析为时间。

于 2013-08-14T12:20:43.413 回答