主要记录下datetime类的一些用法,在碰到时间相关的运算时有个积累。
timedelta
对象表示两个不同的date
或者time
的持续时间,类似于一个时间间隔。
class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
类定义,有很多参数,不过内部存储的只有days
,seconds
和microseconds
,从文档的介绍可以看出其他的都是通过这三个单位来换算的(当然这个也不是特别重要,也不一定准确),换算的方法:
1毫秒 = 1000微妙
一分钟 = 60秒
一小时 = 3600秒
一星期 = 7天
从文档的这个换算方式也是印证了我的猜想。
datetime
类是date
和time
的合集:
class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
其中这些参数的范围是:
MINYEAR <= year <= MAXYEAR
1 <= month <= 12
1 <= day <= number of days in the given month and year
0 <= hour < 24
0 <= minute < 60
0 <= second < 60
0 <= microsecond < 1000000
其中MINYEAR
和MAXYEAR
是常量,分别为1和9999
如果超过了这些参数的范围会报ValueError错误。
datetime
对象的操作包含以下几种:
datetime2 = datetime1 + timedelta
datetime2 = datetime1 - timedelta
timedelta = datetime1 - datetime2
datetime1 < datetime2
下面一一记录:
datetime2 = datetime1 + timedelta
# 加3天
>>> now = datetime.now()
>>> now
datetime.datetime(2017, 6, 25, 20, 53, 40, 36492)
>>> day = timedelta(days=3)
>>> now + day
datetime.datetime(2017, 6, 28, 20, 53, 40, 36492)
# 加1年
>>> days = timedelta(days=365)
>>> now + days
datetime.datetime(2018, 6, 25, 20, 53, 40, 36492)
这里在timedelta
对象上指定的参数是days
,并没有year
参数,如果指定了year或者years参数就会报错:
>>> days = timedelta(year=1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'year' is an invalid keyword argument for this function
>>> days = timedelta(years=1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'years' is an invalid keyword argument for this function
这里需要注意的是datetime的不能超过各类对象的参数值得范围。
# datetime2 = datetime1 - timedelta
# 与相加是一样的。
# timedelta = datetime1 - datetime2
>>> now = datetime.now()
>>> now1 = datetime.now()+ timedelta(days=3)
>>> intervaldays = now1-now
>>> intervaldays
datetime.timedelta(3, 14, 538899)
>>> intervaldays.days
3
>>> intervaldays.seconds
14
>>> intervaldays.microseconds
538899
比较两个datetime
对象
# datetime1 < datetime2
>>> now1 > now
True
datetime
有很多很有用的方法
# weekday,isoweekday前者是星期一为0周日为6,后者是周一为1周日为7
>>> datetime.weekday(now)
6
>>> datetime.isoweekday(now)
7
当然也可以按照datetime
造中的参数名来显示相关的数据:
>>> now.day
25
>>> now.year
2017
>>> now.minute
0
>>> now.second
43
>>> now.month
6
>>> now.hour
21
combine
函数可以将date
和time
对象合并起来
>>> d = date(2005, 7, 14)
>>> t = time(12, 30)
>>> datetime.combine(d, t)
datetime.datetime(2005, 7, 14, 12, 30)