Qual è il modo più pulito e più pignolo per ottenere la data di domani? Ci deve essere un modo migliore di aggiungere uno al giorno, gestire giorni alla fine del mese, eccIl modo più pulito e più pignolo per ottenere la data di domani?
risposta
datetime.date.today() + datetime.timedelta(days=1)
dovrebbe fare il trucco
timedelta
in grado di gestire l'aggiunta di giorni, secondi, microsecondi, millisecondi, minuti, ore o settimane.
>>> 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)
come chiesto in un commento, salto giorni non pongono alcun problema:
>>> 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)
Nessuna manipolazione del 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'
maledettamente.
EDIT - @ Marco: La documentazione dire "sì", ma il codice dice "non tanto":
>>> 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)
Vorrei pensare che gmtime o localtime avrebbe preso il valore restituito da mktime e mi ha dato indietro la tupla originale, con 60 come numero di secondi. E questo test dimostra che questi secondo salto può semplicemente svanire ...
>>> 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' gestisce i secondi bisestili: vedi Nota 2: http://docs.python.org/library/time.html#time.strftime e Nota 3: http://docs.python.org/library/datetime .html # strftime-behavior –
Questo perché Unix time non gestisce i secondi bisestili. Vedi http://en.wikipedia.org/wiki/Unix_time#History, http://www.mail-archive.com/[email protected]/msg00094.html e POSIX stesso. –
"ogni giorno deve essere rappresentato esattamente da 86400 secondi" http://www.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_15 –
Anche il modulo base time
grado di gestire questo:
import time
time.localtime(time.time() + 24*3600)
La soluzione più elegante tra tutte – Greg
Questo fallisce ai limiti dell'ora legale negli Stati Uniti, perché a quei confini un giorno avrà 23 ore e un giorno avrà 25 ore. Anche questo non tiene conto dei secondi bisestili. –
@CharlesWood: questa risposta può restituire un'ora diversa che (in alcuni fusi orari) significa che può restituire una ** diversa data ** (non domani) ma restituisce sempre l'ora esatta 24 ore prima (la risposta accettata ritorna a mezzanotte (ore sconosciute da ora)). Non vedo come i secondi intercalati possano cambiare il risultato qui a meno che non vengano chiamati durante un secondo intercalare sui sistemi in cui 23:59:60 e 00:00:00 hanno lo stesso timestamp. – jfs
- 1. modo pulito per ottenere la data dello scorso venerdì
- 2. Qual è il modo più pulito per ottenere il checksum di un array multidimensionale?
- 3. Modo più pulito per ottenere il contenuto di un file come stringa in Rust?
- 4. Il modo più semplice per incrementare una data in PHP?
- 5. Qual è il modo più pulito per eseguire la copia di Spring Beans in un JSP?
- 6. Qual è il modo Rails per definire la data di domani?
- 7. In Ruby, qual è il modo più pulito per ottenere l'indice del valore più grande in un array?
- 8. Qual è il modo più pignolo per importare i moduli in python
- 9. C'è un modo per rendere DataContractSerializer più pulito XML?
- 10. Qual è il modo più intelligente/più pulito per iterare asincrono su array (o objs)?
- 11. Il modo più sicuro per ottenere la licenza del software
- 12. Modo più pulito per scrivere element.parent(). Parent(). Parent(). Parent(). Parent()
- 13. Controllare se la data è più vecchia di 10 anni e più recente di 20 anni
- 14. Haskell registra, approccio più pulito?
- 15. Qual è il modo più pulito di fare un ordinamento più uniq su un elenco Python?
- 16. PHP: il modo più semplice per ottenere la data del mese 6 mesi prima del primo?
- 17. Qual è il modo più pulito per includere e accedere ai dati binari in VC++ Express?
- 18. Python: modo più efficiente per convertire la data a datetime
- 19. Modo più efficiente per eseguire la data/aaaa query?
- 20. Qual è il modo più pulito per scrivere un ciclo di non blocco per javascript?
- 21. Qual è il modo più pulito per ottenere la somma dei numeri in una raccolta/lista in Dart?
- 22. Qual è il datepicker più pulito e più semplice da utilizzare in Django?
- 23. Qual è il modo più pulito per visualizzare un oggetto java.util.Calendar in JSF?
- 24. Il modo più efficace per rimuovere più sottostringhe dalla stringa?
- 25. Ottieni la data di domani con getDay Javascript
- 26. C'è un modo semplice con NSDateFormatter per ottenere le date di stile "Oggi", "Domani", "Venerdì"?
- 27. Il modo più veloce per ottenere l'accesso a Java?
- 28. Qual è il modo più pulito per gestire gli errori di convalida con PHP?
- 29. Qual è il metodo più pignolo per specificare un file di configurazione?
- 30. Clojure modo migliore per ottenere più thread?
Gestisce anni bisestili ok? – Rook
@ldigas: sì, sì. – nosklo