datetime模块提供了用于操作日期和时间的类、便捷的格式化输出、有效地提取信息和进行时间相关的计算。
在时间数据的处理方面, datetime基本可以满足我的需求了。下面,总结下datetime模块的常用方法。
一 数据格式(日期、时间、日期时间)
datetime下定义了三个类用来存放时间数据
类 | 格式 |
---|---|
datetime.date | 表示日期,datetime.date(year, month, day), 属性分别是年月日 |
datetime.time | 表示时间,datetime.time(hour, minute, second,microsecond), 属性分别是小时,分钟,秒,毫秒 |
datetime.datetime | 日期+时间, datetime.datetime(year, month, day,hour, minute, second,microsecond) |
这三个类本质上没有区别,使用哪一个完全取决于具体业务需要。如果只有日期,使用datetime.date . 如果只有时间,使用datetime.time 。若时间日期都重要,那么使用datetime.datetime . 这就是时间的数据格式,就像list一样,可以用来格式化保存时间数据。
二 时间的获取
1 输入时间
上面三种数据格式都是类嘛,当然可以实例化。
National_Day = datetime.date(2020,10,1)
getuptime = datetime.datetime(6,0,0)
2 读取时间
数据库中的数据一般是以标准的数据类型存储,有一整套成熟的处理方法,详见sql处理时间数据 。excel表中的数据格式可能参差不齐,各种格式, 比如:
- ‘2020年10月1日’
- ’ Feb 4 2017’
- ‘2020-10-01’
那么如何将字符串中的时间信息转换为datetime数据格式呢?
需要注意的是excel本身带有日期转换功能, 非常方便,方法是右键设置单元格格式,选择时间或者日期。
datetime提供strptime 函数也可以转化,str表示string, p表示parse分析的意思,也就是输入一个时间字符串和分析模式,返回一个时间对象。 比如:
date1 = '2020年10月1日' # 字符串
date2 = 'Feb 4 2017' # 字符串
date1 = datetime.datetime.strptime('2020年10月1日' , '%Y年%m月%d日')
date2 = datetime.datetime.strptime('Feb 4 2017' , '%b %d %Y')
print(date1,'\n', date2)
2020-10-01 00:00:00
2017-02-04 00:00:00
分析模式就是按照时间的格式化编码。 datetime的格式化编码表
3 获取执行当前语句的系统时间
datetime.datetime.now() # 完整时间戳
datetime.datetime(2020, 11, 3, 19, 30, 8, 736315)
datetime.date.today() # 日期
datetime.date(2020, 11, 3)
三 时间信息的提取
today = datetime.date.today()
rightnow.year
2020
rightnow.month
11
rightnow.isoweekday()
2
rightnow.day
3
rightnow.hour
19
rightnow.minute
51
rightnow.second
20
rightnow.microsecond
103255
rightnow.isocalendar() # 返回一个元组 (年,第几周, 周几)
(2020, 45, 2)
rightnow.isoformat('/') # 格式化输出
'2020-11-03/19:51:54.103255'
rightnow.strftime('%Y-%m-%d') # 格式化输出
'2020-11-03'
四 时间的计算
timedelta类表示连个不同时间之间的时间差,可以直接对datetime.date, datetime.time和datetime.datetime对象做算术运算,不同的单位之间做四则运算,差值单位也方便控制,构造函数是 datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0), 所以这个差值的单位可以是天、秒、微秒、毫秒、分钟、小时、周。
today = datetime.date.today()
Mybrithday = datetime.date(2020,12,10)
How_long_to_birthday = Mybrithday-today
print(How_long_to_birthday)
>>>datetime.timedelta(days=-24) # 时间差为timedelta类
print(How_long_to_birthday.days)
-24
tomorrow = today + datetime.timedelta(1)
pirnt(tomorrow)
>>>datetime.date(2020, 11, 4)
datetime.datetime.now() + datetime.datedelta(seconds=10) # 时间差也可以是秒
>>>datetime.datetime(2020, 11, 3, 20, 27, 12, 506074)
本文仅提供datetime的常用方法, 更详细的介绍参考datetime官方文档
参考:
python3 datetime官方文档 : https://docs.python.org/3/library/datetime.html
菜鸟教程-strptime函数 :https://www.ru oob.com/python/att-time-strptime.html