1

尝试运行此代码时,我在 Debian 上遇到错误,但它可以在 Windows 上运行。

def checkTime():
    while True:
        with open('date.txt') as tar:
            target = tar.read()
            current = str(datetime.strptime(str(date.today()),'%Y-%m-%d'))[:-9]
            if datetime.strptime(current, '%Y-%m-%d') >= datetime.strptime(target, '%Y-%m-%d'):
                doSomething()
        sleep(10)

它给了我这个错误:

File "/usr/lib/python2.6/_strptime.py", line 328, in _strptime
    data_string[found.end():])
ValueError: unconverted data remains:

date.txt 包含:

2013-03-21

两个系统具有完全相同的日期和时间设置。

4

2 回答 2

3

您的日期处理过于复杂。

这应该在任何平台上都可以正常工作:

with open('date.txt') as tar:
    target = tar.read().strip()
    if date.today() >= datetime.strptime(target, '%Y-%m-%d').date():

调用删除任何无关的.strip()空白(例如\r来自 windows 格式的\r\nCRNL 组合的行)。

我不确定你为什么要花这么多时间将今天的日期转换为字符串,将其解析为datetime对象,然后再次将其转换为字符串。在任何情况下,对象的默认字符串格式都datetime.date遵循 ISO8601,匹配%Y-%m-%d格式:

>>> import datetime
>>> str(datetime.date.today())
'2013-03-21'

要将datetime.date对象转换为datetime.datetime对象,请使用该.combine()方法并datetime.time在混合中添加一个对象:

>>> datetime.datetime.combine(datetime.date.today(), datetime.time.min)
datetime.datetime(2013, 3, 21, 0, 0)

通过调用实例,您可以再次获取.date()对象:datetime.datetimedatetime.date

>>> datetime.datetime.now().date()
datetime.date(2013, 3, 21)
于 2013-03-21T10:18:21.237 回答
1

这可能是因为 'date.txt' 包含 Windows 样式的行尾 ('\r\n'),但 Unix (Debian) 只处理 '\n'。

尝试使用通用行结束打开文件:

open('date.txt','U')
于 2013-03-21T10:10:10.463 回答