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():

不要な空白 ( Windows 形式のCRNL コンボからの行.strip()など) を削除する呼び出しを使用します。\r\r\n

datetime今日の日付を文字列に変換し、それをオブジェクトに解析してから、再び文字列に変換するために、なぜそんなに長い時間を費やすのかわかりません。いずれの場合も、オブジェクトのデフォルトの文字列形式はdatetime.dateISO8601 に従い、次の%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.datetime取得できます。datetime.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 に答える