0

我想知道是否有一种简单的方法可以做到这一点,因为 PyPI 是 Python 打包权威,似乎解析这些时间戳(也许进入纪元时间)应该在 Python 中稍微轻松地处理,但它让我无法理解去做这个。

例如,以下是上传不同版本 IPython 的时间戳:

https://pypi.python.org/packages/source/i/ipython/

有人可以向我解释如何用 Python 以合理的方式将这些时间戳解析到时代。

4

2 回答 2

2

不要尝试解析目录列表输出,而是使用 PyPI API。

有:

这使您可以解析访问该信息。例如,ipython 0.10.1 版的 JSON 链接为您提供 ISO8601 日期:

"urls": [
    {
        "has_sig": false, 
        "upload_time": "2010-10-12T08:40:01", 
        "comment_text": "", 
        "python_version": "source", 
        "url": "https://pypi.python.org/packages/source/i/ipython/ipython-0.10.1.tar.gz", 
        "md5_digest": "54ae47079b0e9a0998593a99ce76ec1f", 
        "downloads": 20100, 
        "filename": "ipython-0.10.1.tar.gz", 
        "packagetype": "sdist", 
        "size": 5837840
    }, 
    {
        "has_sig": false, 
        "upload_time": "2010-10-12T08:40:38", 
        "comment_text": "", 
        "python_version": "source", 
        "url": "https://pypi.python.org/packages/source/i/ipython/ipython-0.10.1.zip", 
        "md5_digest": "f636c7ea03ff626a6ef9bd9a901de691", 
        "downloads": 29725, 
        "filename": "ipython-0.10.1.zip", 
        "packagetype": "sdist", 
        "size": 6419900
    }
]

可以解析为datetime.datetime对象

>>> import datetime
>>> datestr = "2010-10-12T08:40:01"
>>> datetime.datetime.strptime(datestr, '%Y-%m-%dT%H:%M:%S')
datetime.datetime(2010, 10, 12, 8, 40, 1)

也就是说,您的示例清单中的日期格式可以解析为:

>>> datestr = "12-Oct-2010 06:40"
>>> datetime.datetime.strptime(datestr, '%m-%b-%Y %H:%M')
datetime.datetime(2010, 12, 1, 6, 40)

但是%b占位符的行为取决于您的语言环境;只有当它设置为 C 或英语时,它才会在这里正常工作。

解析任意日期的最佳方法是使用python-dateutil(附加安装),因为它的解析器非常强大:

>>> from dateutil.parser import parse
>>> parse(datestr)
datetime.datetime(2010, 10, 12, 6, 40)
于 2013-10-15T23:47:14.357 回答
0
from dateutil import parser
parser.parse("13-Oct-2010 06:40")
于 2013-10-15T23:47:13.333 回答