什么是最干净,最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