Yarının randevusunu almanın en temiz ve en Pythonic yolu nedir? Güne bir tane eklemekten, günleri ayın sonunda işlemekten vb. Daha iyi bir yol olmalı.
Yarının randevusunu almanın en temiz ve en Pythonic yolu nedir? Güne bir tane eklemekten, günleri ayın sonunda işlemekten vb. Daha iyi bir yol olmalı.
Yanıtlar:
datetime.date.today() + datetime.timedelta(days=1)
hile yapmalı
timedelta
gün, saniye, mikrosaniye, milisaniye, dakika, saat veya hafta eklemeyi halledebilir.
>>> import datetime
>>> today = datetime.date.today()
>>> today
datetime.date(2009, 10, 1)
>>> today + datetime.timedelta(days=1)
datetime.date(2009, 10, 2)
>>> datetime.date(2009,10,31) + datetime.timedelta(hours=24)
datetime.date(2009, 11, 1)
Bir yorumda sorulduğu gibi, artık günler sorun teşkil etmez:
>>> datetime.date(2004, 2, 28) + datetime.timedelta(days=1)
datetime.date(2004, 2, 29)
>>> datetime.date(2004, 2, 28) + datetime.timedelta(days=2)
datetime.date(2004, 3, 1)
>>> datetime.date(2005, 2, 28) + datetime.timedelta(days=1)
datetime.date(2005, 3, 1)
Artık saniyelerin işlenmesi yok tho:
>>> from datetime import datetime, timedelta
>>> dt = datetime(2008,12,31,23,59,59)
>>> str(dt)
'2008-12-31 23:59:59'
>>> # leap second was added at the end of 2008,
>>> # adding one second should create a datetime
>>> # of '2008-12-31 23:59:60'
>>> str(dt+timedelta(0,1))
'2009-01-01 00:00:00'
>>> str(dt+timedelta(0,2))
'2009-01-01 00:00:01'
lanetlemek.
EDIT - @Mark: Dokümanlar "evet" diyor, ancak kod "o kadar değil" diyor:
>>> time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S")
(2008, 12, 31, 23, 59, 60, 2, 366, -1)
>>> time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S"))
1230789600.0
>>> time.gmtime(time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S")))
(2009, 1, 1, 6, 0, 0, 3, 1, 0)
>>> time.localtime(time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S")))
(2009, 1, 1, 0, 0, 0, 3, 1, 0)
Gmtime veya localtime'ın mktime tarafından döndürülen değeri alacağını ve bana orijinal demeti geri vereceğini düşünürdüm, 60 saniye olarak. Ve bu test, bu artık saniyelerin kaybolabileceğini gösteriyor ...
>>> a = time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S"))
>>> b = time.mktime(time.strptime("2009-01-01 00:00:00","%Y-%m-%d %H:%M:%S"))
>>> a,b
(1230789600.0, 1230789600.0)
>>> b-a
0.0
Temel time
modül bile bunu halledebilir:
import time
time.localtime(time.time() + 24*3600)
time.strftime
artık saniyeleri ele alır: Not 2'ye bakın: docs.python.org/library/time.html#time.strftime ve Not 3: docs.python.org/library/datetime.html#strftime-behavior