Python 时间操作datetime
盆友圈的小可爱 人气:0复习回顾:
Python 在对时间操作内置库提供了time模块和datetime模块。
- time模块对结构化时间与时间戳和字符串时间进行互相转换相关方法学习
- datetime 模块提供处理时间和日期的多种类,简单方便
python 还提供通用日历相关方法的calendar
模块,时区信息zoneinfo
模块,以及第三方库arrow
、dateutil
模块对时间处理
1. datetime 模块概述
datetime
模块不仅支持时间日期数学运算,还提供高效输出格式化和操作的属性相关方法
datetime
模块根据包含时区信息将日期和时间分为两种感知型对象和简单型对象
- 感知型时间对象:充分使用应用性算,以及当地实际情况来精确定位时间点,通常用来表示没有解释空间的固定时间点
- 简单型时间对象:不会包含当地的信息,一切取决于具体程序所计算出的时间点,忽略现实因素,通常可以代表UTC世界标准时间
datetime
提供许多类,能进一步方便与我们取出感知型时间对象的信息。
date
类型的对象都是简单型的time
和datetime
类型的对象可以是感知型或者简单型timedelta
对象既不是感知型对象也不是简单型对象
2. datetime 组成部分
datetime
模块对比time
不同的是,它主要提供操作日期和时间的类。
通过查看 datetime
模块文件主要提供包括处理时间日期的还有时区相关的类共6类
类名称 | 描述 |
---|---|
datetime.date | 用于表示日期,常用的属性有:year, month和day |
datetime.time | 用于表示时间,常用属性有:hour, minute, second, microsecond |
datetime.datetime | 用于表示日期时间 |
datetime.timedelta | 用于表示两个date、time、datetime实例之间的时间间隔,最小单位可达到微秒 |
datetime.tzinfo | 时区相关信息对象的抽象基类。它们由datetime和time类使用,以提供自定义时间的而调整。 |
datetime.timezone | Python 3.2中新增的功能,实现tzinfo抽象基类的类,表示与UTC的固定偏移量 |
datetime 模块相关类关系图:
datetime 模块中类的对象都是不可变类型
date
、time
这两个类是我们日常使用最多的
3. datetime 常量
在datetime.pyi文件中,我们可知道detetime模块定义了两个常量dat
常量名称 | 描述 |
---|---|
datetime.MINYEAR | datetime.date或datetime.datetime对象所允许的年份的最小值,值为1 |
datetime.MAXYEAR | datetime.date或datetime.datetime对象所允许的年份的最大值,只为9999 |
4. datetime 常用方法
datetime 模块对比time模块提供更多的操作时间日期的操作,以下我们列出常用的方法
方法 | 作用 |
---|---|
datetime.datetime.timestamp() | 将datetime对象转换输出成时间戳的形式 |
datetime.datetime.now() | 格式化输出当前系统时间 |
datetime.datetime.timedelta([hours,days]) | 设置某个属性的偏移量 |
datetime.datetime.strptime(date_str,format) | 将时间字符串转换为datetime对象 |
datetime.date.fromtimestamp(timestamp) | 将时间戳格式化输出为日期 |
datetime.date.today() | 返回当地本地日期 |
datetime.time.strftime(fromat) | 返回当地时间格式化输出 |
datetime.time.dst() | 返回当地所在的时区,tzinfo为none,则返回none |
datetime.tzinfo.utcoffset(dt) | 设置时区差,以东为正值,返回timedelta对象 |
datetime.tzinfo.dst(dt) | 将夏令时调整返回一个timedelta对象 |
5、实操
我们对datetime
模块常用方法学习,我们来实现输入日期判断是昨天或者今天的日期即为Ture,否则为false
def check_current_date(sw_date): cur_date_list = time.strftime("%Y/%m/%d", time.localtime()) .split('/') today = datetime.datetime.now() offset = datetime.timedelta(days=-1) yes_data = today+offset yes_data_list = yes_data.strftime("%Y/%m/%d").split('/') data_list = cur_date_list + yes_data_list print("data_list",data_list) seps = ['/', '-', '_'] for sep in seps: date_parts= sw_date.split(sep) print("cur_date_list = {}, arg sw_date = {}".format(data_list, sw_date)) if len(date_parts) == 3: for data in date_parts: if data not in data_list: return False return True return False
我们来进行测试一下结果:
print("当前日期:",datetime.datetime.now()) print("测试前一天:",check_current_date("2021-10-29")) print("测试当前日期:",check_current_date("2021/10/30"))
6、总结
本期,我们对datetime模块进行基本的认识,知道datetime模块包含6个类,且对常用方法进行学习和实操。
加载全部内容