【问题标题】:Python convert string to datetime for comparison to datetime objectPython将字符串转换为日期时间以与日期时间对象进行比较
【发布时间】:2016-12-02 05:13:15
【问题描述】:

我有一个字符串lfile,其中包含一个日期时间(type(lfile) 给出<type 'str'>)和一个Python 日期时间对象wfile。代码如下:

import os, datetime
lfile = '2005-08-22_11:05:45.000000000'
time_w = os.path.getmtime('{}\\{}.py' .format('C:\Temp_Readouts\RtFyar','TempReads.csv'))
wfile = datetime.datetime.fromtimestamp(time_w)

wfile 包含此 2006-11-30 19:08:06.531328repr(wfile) 给出:

datetime.datetime(2006, 11, 30, 19, 8, 6, 531328)

问题:

我需要:

  1. lfile 转换为 Python 日期时间对象
  2. 比较 lfilewfile 并确定哪个日期时间更近

对于 1.:

根据here,我只能使用strptime 获得部分解决方案。这是我尝试过的:

lfile = datetime.datetime.strptime(linx_file_dtime, '%Y-%m-%d_%H:%M:%S')

输出是:

`ValueError: unconverted data remains: .000`

问题 1

似乎strptime() cannot 处理纳秒。如何告诉 strptime() 忽略最后 3 个零?

对于 2.:

当我使用type(wfile) 时,我得到<type 'datetime.datetime'>。如果 wfilelfile 都是 Python 日期时间对象(即如果步骤 1. 成功),那么 this 会起作用吗?:

if wtime < ltime:
    print 'Linux file created after Windows file'
else:
    print 'Windows file created after Linux file'

问题 2

或者还有其他方法可以让 Python 比较日期时间对象以确定两者中的哪一个在另一个之后发生?

【问题讨论】:

    标签: python python-2.7 datetime strptime


    【解决方案1】:

    问题 1

    Python 处理的是微秒,而不是纳秒。您可以去掉时间的最后三个字符,将其转换为微秒,然后在末尾添加.%f

    lfile = datetime.datetime.strptime(linx_file_dtime[:-3], '%Y-%m-%d_%H:%M:%S.%f')
    

    问题 2

    是的,比较有效:

    if wtime < ltime:
        ...
    

    【讨论】:

    • 谢谢!做到了。
    【解决方案2】:

    没错,strptime() 不处理纳秒。您链接到的问题中接受的答案提供了一个选项:去掉最后 3 位数字,然后使用附加到格式字符串的 .%f 进行解析。

    另一种选择是使用dateutil.parser.parse()

    >>> from dateutil.parser import parse
    >>> parse('2005-08-22_11:05:45.123456789', fuzzy=True)
    datetime.datetime(2005, 8, 22, 11, 5, 45, 123456)
    

    fuzzy=True 需要忽略日期和时间组件之间不受支持的下划线。因为datetime 对象不支持纳秒,所以最后 3 位数字消失,只剩下微秒精度。

    【讨论】:

    • 哈!抱歉错过了。似乎这个问题可能已经在我发布的早期链接中得到了回答。也感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 2021-10-07
    • 2018-07-22
    • 2022-01-16
    • 2014-02-12
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2022-01-26
    相关资源
    最近更新 更多