什麼是最乾淨,最Pythonic的方式來獲取明天的日期?必須有一個更好的辦法,而不是一個添加到天,處理日在月底等最乾淨和最Pythonic的方式來獲取明天的日期?
回答
datetime.date.today() + datetime.timedelta(days=1)
應該做的伎倆
timedelta
可以處理增加天,秒,微秒,毫秒,幾分鐘,幾小時或幾周。
>>> 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)
如問一個評論,飛躍天不成問題:
>>> 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)
leap seconds壽無處理:
>>> 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'
織補。
編輯 - @馬克:文檔說「是」,但代碼說「沒有那麼多」:
>>> 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的或本地時間將採取由mktime返回,給我的價值返回原始元組,其中60爲秒數。而這個測試表明,這些閏秒可慢慢消失......
>>> 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'處理閏秒:請參閱注2:http://docs.python.org/library/time.html#time.strftime和注3:http://docs.python.org/library/datetime .html#strftime-behavior – 2009-10-02 00:18:22
這是因爲Unix時間不處理閏秒。請參閱http://en.wikipedia.org/wiki/Unix_time#History,http://www.mail-archive.com/[email protected]/msg00094.html和POSIX本身。 – 2009-11-29 23:37:31
「每一天都應該被準確的計算86400秒」http://www.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_15 – 2009-11-29 23:42:08
連基本的time
模塊可以處理這個問題:
import time
time.localtime(time.time() + 24*3600)
最優雅的解決方案 – Greg 2013-02-01 20:16:16
這在美國夏令時的邊界上失敗了,因爲在這些邊界上,一天會有23個小時,一天會有25個小時。這也不會考慮閏秒。 – 2014-08-14 23:12:29
@CharlesWood:這個答案可能會返回一個不同的小時(在某些時區),這意味着它可能會返回一個**不同的日期**(不是明天),但它總是返回提前24小時的時間(接受的答案會在午夜返回(從現在起未知小時))。我沒有看到閏秒如何在這裏改變結果,除非在23:59:60和00:00:00具有相同時間戳的系統上的閏秒調用。 – jfs 2014-09-04 21:46:34
- 1. 從「乾淨」和「髒」URL獲取數據的最佳方式
- 2. 什麼是切換視圖最乾淨和最好的方式?
- 3. 獲取發送郵件的MessageID最簡單/最乾淨的方式是什麼?
- 4. 最乾淨的方法來設置對象的時間戳/日期時間
- 5. 最乾淨的方式來查找列表中的匹配
- 6. 如何獲取日期的第一天和最後一天
- 7. 最乾淨的方式來建立一個後備鏈?
- 8. 最乾淨的方式來寫2布爾條件(4分支)
- 9. 最乾淨的方式來確定是否存在一行?
- 10. 最乾淨的方式來導入/需要一個Vue.js指令?
- 11. 最乾淨的方式來重置表格
- 12. 最乾淨的方式來隱藏密碼輸入字段?
- 13. 最乾淨的方式來調用跨線程事件
- 14. Sitecore最乾淨的方式來存儲表單字段標籤
- 15. T-SQL - 獲取最新的日期和最近的未來日期
- 16. 獲取將來的最近日期
- 17. 獲取當前值的最簡單/最乾淨的方法<input>元素
- 18. 獲取給定日期的最後一天(日期)
- 19. 什麼是最好/最乾淨的方式來實施滑動視圖?
- 20. 獲取最小和最大日期
- 21. 紅寶石:乾淨的方式日期和時間
- 22. Pythonic的方式來獲得列表中的最大項目
- 23. 從PHP當天獲取最近7天的日期時間的日期記錄
- 24. 獲取當前日期和最近六天的Android SQLite?
- 25. 獲取最近的日期
- 26. 最快的方式來獲得一個月,一天,一年,日期字符串
- 27. 查詢來獲取當前日期和最小日期爲ID
- 28. 獲取最後一個Java日期/日曆的最後日期
- 29. 最好的方式來更新餅乾?
- 30. SQL查詢來獲取最早日期
它處理閏年好嗎? – Rook 2009-10-01 23:01:19
@ldigas:是的。 – nosklo 2009-10-02 10:31:34