python内置时间模块datetime之datetime类 作者:马育民 • 2018-07-07 13:30 • 阅读:10348 # 计算机中的时间 详见 https://www.malaoshi.top/show_1IX7UEucQffQ.html # datetime模块 datetime模块是处理日期、时间的模块。(还有其他关于日期时间的内置模块,以及第三方模块) 该模块有6个类: 1. date 日期对象,常用的属性有year, month, day 2. **time** 时间对象 3. **datetime** 日期时间对象,常用的属性有hour, minute, second, microsecond 4. datetime_CAPI 日期时间对象C语言接口 5. **timedelta** 时间间隔,即两个时间点之间的长度 6. tzinfo 时区信息对象 详细参看官方文档: https://docs.python.org/3/library/datetime.html#module-datetime 感谢中文文档: https://blog.csdn.net/cmzsteven/article/details/64906245 # 导入 datetime 使用前需要导入 datetime ``` import datetime ``` # datetime类 ### 初始化 ``` datetime.datetime(year, month, day, hour=0, minute=0, second=0) ``` ##### 参数说明 - year:必须 - month:必须。1 <= month <= 12 - day:必须。 - hour:0 <= hour < 24 - minute:0 <= minute < 60 - second:0 <= second < 60 ##### 返回 datetime对象 ### today() 返回当前系统时间的datetime对象 ```python >import datetime >datetime.datetime.today() ``` 执行结果: ``` datetime.datetime(2024, 4, 10, 22, 58, 30, 181873) ``` ### now([tz]) 返回当前系统时间的datetime对象,可以设置时区,不设置时区,同today() ```python >import datetime >datetime.datetime.now() #设置世界统一时间utc >datetime.datetime.now(datetime.timezone.utc) ``` 执行结果: ``` datetime.datetime(2024, 4, 10, 23, 0, 0, 331462) ``` >截止到发本文时,需要用第三方模块才能调用该方法设置时区 ### utcnow() 返回当前时间(世界统一时间utc)的datetime对象 ```python >import datetime #设置世界统一时间utc >datetime.datetime.utcnow() ``` 执行结果: ``` datetime.datetime(2024, 4, 10, 15, 1, 0, 441078) ``` # 格式化成字符串 ### 格式化符号如下: - `%y`:两位数的年份表示(00-99) - `%Y`:四位数的年份表示(000-9999) - `%m`:月份(01-12) - `%d`:月内中的一天(0-31) - `%H`:24小时制小时数(0-23) - `%I`:12小时制小时数(01-12) - `%M`:分钟数(00=59) - `%S`:秒(00-59) - `%a`:本地简化星期名称 - `%A`:本地完整星期名称 - `%b`:本地简化的月份名称 - `%B`:本地完整的月份名称 - `%c`:本地相应的日期表示和时间表示 - `%j`:年内的一天(001-366) - `%p`:本地A.M.或P.M.的等价符 - `%U`:一年中的星期数(00-53)星期天为星期的开始 - `%w`:星期(0-6),星期天为星期的开始 - `%W`:一年中的星期数(00-53)星期一为星期的开始 - `%x`:本地相应的日期表示 - `%X`:本地相应的时间表示 - `%Z`:当前时区的名称 - `%%`:%号本身 ### strftime() 将datetime对象格式化(format)成字符串 ```python >import datetime >datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S') ``` # 解析成对象 ### strptime() 将字符串型的日期时间解析(parse)为datetime类对象 ```python >import datetime #将年月日格式化成datetime对象 >datetime.datetime.strptime('2018-01-03','%Y-%m-%d') #将年月日时分秒格式化成datetime对象 > datetime.datetime.strptime('2018-01-03 11:23:38','%Y-%m-%d %H:%M:%S') ``` ### 获取日期是 第几周、星期几 ``` import datetime #str 转datetime s = '2021-1-5' date_time = datetime.datetime.strptime(s,'%Y-%m-%d') print (date_time) #获取当前时间 # t_date=datetime.date.today() # print (t_date) #获取第几周 week = date_time.strftime("%W") print("获取第几周:",week) #获取星期几 week_day = date_time.strftime("%w") print ("获取星期几:",week_day) ``` # 将一种格式的字符串格式化成另一种格式 将 `Wed Mar 30 23:40:06 +0800 2022` 格式化成 `2022-03-30 23:40:06` ### 解决思路: 1. 将 `Wed Mar 30 23:40:06 +0800 2022` 解析成 `datetime` 对象,解析格式:`'%a %b %d %H:%M:%S %z %Y'` 2. 将 步骤1 中的 `datetime` 对象,格式化成 `'%Y-%m-%d %H:%M:%S'` 格式 ### 代码 ``` import datetime s='Wed Mar 30 23:40:06 +0800 2022' datetimeObj=datetime.datetime.strptime(s,'%a %b %d %H:%M:%S %z %Y') res=datetimeObj.strftime('%Y-%m-%d %H:%M:%S') print(res) ``` # timedelta datetime.timedelta对象代表两个时间之间的 **时间差**,用于日期计算 ### 初始化 ``` datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) ``` ##### 参数说明: 仅支持天,秒和微秒(1毫秒=1000微秒) 参数可以是整数或浮点数,并且可以是正数或负数 ### total_seconds() 时间间隔的总秒数,浮点型 可能为负数,过去时间减去现在(未来)时间 ```python .total_seconds() ``` ##### 返回值 间隔时长,单位:秒 ### 10小时之后的时间: ```python t=datetime.datetime.today()+datetime.timedelta(hours=10) print(t) ``` ### 2018-07-10 23:14:00与现在时间的间隔是多少小时 ```python oldtime=datetime.datetime.strptime("2018-07-10 23:14:00","%Y-%m-%d %H:%M:%S") now=datetime.datetime.today() d=now-oldtime snd=d.total_seconds() snd=math.ceil(snd) hour=snd//60//60 print("间隔%d小时"%hour) ``` 原文出处:https://www.malaoshi.top/show_1EF1Sv8jiTcq.html