Cách sạch nhất và Pythonic nhất để có được ngày mai là gì? Phải có một cách tốt hơn là thêm một vào ngày, xử lý các ngày vào cuối tháng, v.v.
Cách sạch nhất và Pythonic nhất để có được ngày mai là gì? Phải có một cách tốt hơn là thêm một vào ngày, xử lý các ngày vào cuối tháng, v.v.
Câu trả lời:
datetime.date.today() + datetime.timedelta(days=1)
nên làm thủ thuật
timedelta
có thể xử lý việc thêm ngày, giây, micro giây, mili giây, phút, giờ hoặc tuần.
>>> 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)
Như đã hỏi trong một bình luận, ngày nhuận không có vấn đề gì:
>>> 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)
Không xử lý giây nhuận 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'
anh yêu.
CHỈNH SỬA - @Mark: Tài liệu nói "có", nhưng mã nói "không quá nhiều":
>>> 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)
Tôi nghĩ rằng gmtime hoặc localtime sẽ lấy giá trị do mktime trả về và trả lại cho tôi bộ giá trị ban đầu, với 60 là số giây. Và thử nghiệm này cho thấy rằng những giây nhuận này có thể biến mất ...
>>> 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
Ngay cả time
mô-đun cơ bản cũng có thể xử lý điều này:
import time
time.localtime(time.time() + 24*3600)
time.strftime
tay cầm giây nhuận: xem chú giải 2: docs.python.org/library/time.html#time.strftime và chú giải 3: docs.python.org/library/datetime.html#strftime-behavior