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 timemodül bile bunu halledebilir:
import time
time.localtime(time.time() + 24*3600)
time.strftimeartı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