2013-03-21 34 views
0

在嘗試運行這段代碼我得到Debian的一個錯誤,但它適用於Windows。日期時間工作在Windows,但不是Debian的

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

你爲什麼將今天的日期爲一個字符串,然後再次將其轉換爲datetime,然後將其再次轉換爲字符串再次,只有將其轉換爲datetime對象? – 2013-03-21 10:07:55

+0

科學!或者更現實的解釋是,我傾向於使事情複雜化。 – Leinad177 2013-03-21 12:40:13

回答

2

你的日期處理方式是過於複雜。

這應該在任何平臺上做精:

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

.strip()調用中刪除任何多餘的空格(從Windows格式\r\n CRNL組合如\r線)。

我不確定爲什麼你要經過這麼長的時間才能將今天的日期轉換爲字符串,並將其解析爲一個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) 

通過在datetime.datetime實例調用.date()可以再次得到一個datetime.date對象:

>>> datetime.datetime.now().date() 
datetime.date(2013, 3, 21) 
+0

謝謝。這解釋得很好。 – Leinad177 2013-03-21 12:40:33

1

這可能是因爲 'date.txt' 包含Windows風格的行結束符( '\ r \ n'),而UNIX(Debian的)僅處理 '\ n'。

嘗試使用通用線路打開你的文件結尾:

open('date.txt','U') 
相關問題