问题
解决方案
为了执行不同时间单位的转换和计算,请使用 datetime 模块。 比如,为了表示一个时间段,可以创建一个 timedelta 实例,就像下面这样:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
>>> from datetime import timedelta
>>> a = timedelta(days = 2 , hours = 6 )
>>> b = timedelta(hours = 4.5 )
>>> c = a + b
>>> c.days
2
>>> c.seconds
37800
>>> c.seconds / 3600
10.5
>>> c.total_seconds() / 3600
58.5
>>>
|
如果你想表示指定的日期和时间,先创建一个 datetime
实例然后使用标准的数学运算来操作它们。比如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
>>> from datetime import datetime
>>> a = datetime( 2012 , 9 , 23 )
>>> print (a + timedelta(days = 10 ))
2012 - 10 - 03 00 : 00 : 00
>>>
>>> b = datetime( 2012 , 12 , 21 )
>>> d = b - a
>>> d.days
89
>>> now = datetime.today()
>>> print (now)
2012 - 12 - 21 14 : 54 : 43.094063
>>> print (now + timedelta(minutes = 10 ))
2012 - 12 - 21 15 : 04 : 43.094063
>>>
|
在计算的时候,需要注意的是 datetime
会自动处理闰年。比如:
1
2
3
4
5
6
7
8
9
10
11
|
>>> a = datetime( 2012 , 3 , 1 )
>>> b = datetime( 2012 , 2 , 28 )
>>> a - b
datetime.timedelta( 2 )
>>> (a - b).days
2
>>> c = datetime( 2013 , 3 , 1 )
>>> d = datetime( 2013 , 2 , 28 )
>>> (c - d).days
1
>>>
|
讨论
对大多数基本的日期和时间处理问题, datetime
模块已经足够了。 如果你需要执行更加复杂的日期操作,比如处理时区,模糊时间范围,节假日计算等等, 可以考虑使用 dateutil模块
许多类似的时间计算可以使用 dateutil.relativedelta()
函数代替。 但是,有一点需要注意的就是,它会在处理月份(还有它们的天数差距)的时候填充间隙。看例子最清楚:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
>>> a = datetime( 2012 , 9 , 23 )
>>> a + timedelta(months = 1 )
Traceback (most recent call last):
File "<stdin>" , line 1 , in <module>
TypeError: 'months' is an invalid keyword argument for this function
>>>
>>> from dateutil.relativedelta import relativedelta
>>> a + relativedelta(months = + 1 )
datetime.datetime( 2012 , 10 , 23 , 0 , 0 )
>>> a + relativedelta(months = + 4 )
datetime.datetime( 2013 , 1 , 23 , 0 , 0 )
>>>
>>> # Time between two dates
>>> b = datetime( 2012 , 12 , 21 )
>>> d = b - a
>>> d
datetime.timedelta( 89 )
>>> d = relativedelta(b, a)
>>> d
relativedelta(months = + 2 , days = + 28 )
>>> d.months
2
>>> d.days
28
>>>
|
以上就是Python 日期与时间转换的方法的详细内容,更多关于Python 日期与时间转换的资料请关注服务器之家其它相关文章!
原文链接:https://python3-cookbook.readthedocs.io/zh_CN/latest/c03/p12_convert_days_to_seconds_and_others.html