Jaki jest najczystszy i najbardziej Pythonowy sposób na uzyskanie jutrzejszej daty? Musi być lepszy sposób niż do dodasz do dnia, uchwyt dni pod koniec miesiąca, itpCzysty i najbardziej Pythonowy sposób na jutrzejszy termin?
Odpowiedz
datetime.date.today() + datetime.timedelta(days=1)
powinno wystarczyć
timedelta
może obsługiwać dodanie dni, sekundy, mikrosekund milisekund, minut, godzin lub tygodni.
>>> 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)
Jak zapytałem w komentarzu, skok dzień nie stanowią problemu:
>>> 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)
Nie obsługa leap seconds 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'
darn.
EDIT - @Mark: Docs powiedzieć „tak”, ale kod mówi „nie tyle”:
>>> 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)
Myślę, że gmtime lub localtime miałaby wartość zwracana przez mktime i dał mi cofnij oryginalną krotkę, z 60 jako liczbą sekund. I ten test pokazuje, że te sekundy przestępne może po prostu zniknąć ...
>>> 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
'time.strftime' obsługuje sekundy przestępne: patrz uwaga 2: http://docs.python.org/library/time.html#time.strftime i Note 3: http://docs.python.org/library/datetime .html # strftime-behaviour –
Dzieje się tak, ponieważ czas Unix nie radzi sobie z sekundami przestępnymi. Zobacz http://en.wikipedia.org/wiki/Unix_time#History, http://www.mail-archive.com/[email protected]/msg00094.html i sam POSIX. –
"każdego dnia rozlicza się dokładnie 86400 sekund" http://www.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_15 –
Nawet podstawowy moduł time
może obsłużyć to:
import time
time.localtime(time.time() + 24*3600)
Najbardziej eleganckie rozwiązanie spośród wszystkich – Greg
To kończy się niepowodzeniem na granicach czasu letniego w Stanach Zjednoczonych, ponieważ na tych granicach jeden dzień będzie miał 23 godziny, a jeden dzień będzie miał 25 godzin. Nie uwzględnia to również sekund przestępnych. –
@ CharlesWood: ta odpowiedź może zwrócić inną godzinę, która (w niektórych strefach czasowych) oznacza, że może zwrócić ** inną datę ** (nie jutro), ale zawsze zwraca czas, który jest dokładnie 24 godziny do przodu (zaakceptowana odpowiedź zwraca północ (nieznane godziny od teraz)). Nie rozumiem, w jaki sposób sekundy przeskakujące mogą zmienić wynik tutaj, chyba że zostaną wywołane podczas sekundy przestępnej w systemach, w których 23:59:60 i 00:00:00 mają ten sam znacznik czasu. – jfs
- 1. Najbardziej Pythonowy sposób na drukowanie nowej linii
- 2. Jaki jest najbardziej Pythonowy sposób określania endianiczności?
- 3. Najbardziej Pythonowy sposób na zabicie wątku po pewnym czasie
- 4. Najbardziej Pythonowy sposób obsługi podziału klasy na wiele klas
- 5. Najbardziej Pythonowy sposób drukowania * co najwyżej * pewna liczba miejsc dziesiętnych
- 6. Najbardziej Pythonowy sposób dostarczania metadanych funkcji w czasie kompilacji?
- 7. pythonowy sposób pisać pakiet na łatwe importowanie
- 8. Pythonowy sposób na rozszerzenie potencjalnie niekompletnej listy
- 9. Czas jutrzejszy xx: xx
- 10. Pythonowy sposób iterowania na macierzy 3D
- 11. pythonowy sposób przypisać wartości domyślne
- 12. Pythonowy sposób kopiowania obiektu iterowalnego
- 13. pythonowy sposób drukowania elementów listy
- 14. Pythonowy sposób zapisu funkcji constrain()
- 15. Czysty sposób rzutowania na rzeczywisty typ obiektu
- 16. Kiedy lub gdzie został sformułowany termin "Najbardziej dokuczliwy parse"?
- 17. Clojure: Idiomatyczny/czysty sposób na uniknięcie NPE w monadowy sposób
- 18. Jaki jest najbardziej wydajny sposób rejestrowania nazwy klasy i metody?
- 19. Najszybszy i najbardziej efektywny sposób tworzenia XML
- 20. pythonowy sposób, aby zwiększyć i przypisać identyfikatory ze słownika
- 21. Najbardziej efektywny sposób na zgrupowanie boxplot matlab
- 22. Najbardziej efektywny sposób na wykonanie wyszukiwania fonetycznego
- 23. najbardziej elegancki sposób zmienić 0 na 1 i odwrotnie
- 24. Najbardziej efektywny sposób konwersji BCD na binarny
- 25. Pythonowy sposób akceptowania argumentów za pomocą optparse
- 26. Najbardziej elegancki sposób na sprawdzenie obsługi sessionStorage?
- 27. Najbardziej skuteczny sposób konwersji InputStream na bajt []?
- 28. najbardziej skuteczny sposób debugowania na urządzeniu Blackberry?
- 29. Najbardziej efektywny sposób na indeksowanie zwróconej tablicy?
- 30. Prawidłowy sposób na uzyskanie najbardziej negatywnego Double
Zajmuje lata przestępne ok? – Rook
@ldigas: tak to robi. – nosklo