2014-09-01 81 views
0

我有一些代碼需要量化從文件中讀取的日期。例如,設置11:50至12:00來清理數字。我目前做到這一點的東西,如下列:如何將日期時間添加到第二天時自動翻轉

end = end.replace(hour = end.hour + 1, minute = 0) 

你再碰上一個問題,如果end.hour是晚上11點,因爲這將滾動到第二天。你可以用類似的代碼來防止這種情況...

if end.hour == 23: 
    end = end.replace(day = end.day + 1, hour = 0, minute = 0) 
else: 
    end = end.replace(hour= end.hour + 1, minute=0) 

但是那麼如果那一天是這個月的最後一天呢?然後你需要翻到下一個月,等等。

必須有一個更乾淨的方式來做到這一點。如何處理量化日期,同時考慮到第二天/每月/每年?

+0

退房'datetime':https://docs.python.org/2/library/datetime.html – fuesika 2014-09-01 16:39:20

+1

@pyStarter:通過使用'.replace()'方法來判斷OP * already *正在使用'datetime'模塊。 – 2014-09-01 16:42:19

回答

2

而不是使用datetime.replace(),使用timedelta() object,添加到您的datetime對象:

end += timedelta(hours=1) 

這會帶滾來滾去的日期爲您的護理:

>>> from datetime import datetime, timedelta 
>>> end = datetime(2014, 9, 1, 22, 45) 
>>> end += timedelta(hours=1) 
>>> end 
datetime.datetime(2014, 9, 1, 23, 45) 
>>> end += timedelta(hours=1) 
>>> end 
datetime.datetime(2014, 9, 2, 0, 45) 

這適用於當然也增加月份和年份:

>>> last_day = datetime(2014, 12, 31, 23, 45) 
>>> last_day + timedelta(hours=1) 
datetime.datetime(2015, 1, 1, 0, 45) 
1

四捨五入到下一個小時(所以分鐘= 0),你可以使用dateutil這樣的:

import datetime as DT 
import dateutil.rrule as rrule 

def next_hour(date): 
    rr = rrule.rrule(rrule.HOURLY, byminute=[0], dtstart=date, count=1) 
    return rr.after(date, inc=True) 

print(next_hour(DT.datetime(2000,1,31,11,50)))  
# 2000-01-31 12:00:00 

print(next_hour(DT.datetime(2000,1,31,12,0)))  
# 2000-01-31 12:00:00 

print(next_hour(DT.datetime(2000,1,31,23,50)))  
# 2000-02-01 00:00:00 
+0

@Martijn:OP詢問如何在11:50到12:00之間輪轉。給日期時間添加'timedelta(hours = 1)'是不夠的。據推測,OP也希望12點保持12:00。所以我不認爲dateutil是矯枉過正的。我們以不同的方式解釋這個問題。 – unutbu 2014-09-01 17:13:44

+0

你完全正確;我的錯。 – 2014-09-01 17:17:37

相關問題