1、核心逻辑
time,表示时间的类
datetime,表示日期和时间的类
timedelta,表示时间间隔,即两个时间点的间隔
tzinfo,与时区有关的信息
( 这些类的对象都是不可变的 )
(类有类方法,类方法里有方法,方法继承了类方法)
2、date
、time
和datetime
对象
下面介绍最基本3个对象的最基本用法。首先,从datetime
模块导入3个对象
In [1]: from datetime import date,time,datetime
构造一个日期date
实例,2020年9月1日:
In [2]: date(2020,9,1)
Out[2]: datetime.date(2020, 9, 1)
构造一个时间time
实例,10点10分0秒:
In [3]: time(10,10,0)
Out[3]: datetime.time(10, 10)
构造一个日期+时间的完整datetime
实例,2020年9月1日 10点10分0秒:
In [4]: datetime(2020,9,1,10,10,10)
Out[4]: datetime.datetime(2020, 9, 1, 10, 10, 10)
datatime
datetime.now()
& datetime.today()
import datetime
print(datetime.datetime.now())
# datetime.today()
#2020-09-21 23:13:05.245157
print(datetime.datetime.today())
#2020-09-21 23:13:57.062886
datetime.strptime()
打印格式化字符,常用的几个:
字符 | 意义 |
---|---|
%Y | %Y 四位数的年份表示(000-9999) |
%y | 两位数的年份表示(00-99) |
%m | 月份(01 - 12) |
%d | 一个月中的第几天(01 - 31) |
%H | 一天中的第几个小时(24小时制,00 - 23) |
%I | 12小时制小时数(01-12) |
%M | 分钟数(00 - 59) |
%S | 秒(01 - 61) |
%w | 一个星期中的第几天(0 - 6,0是星期天) |
%Z | 时区的名字(如果不存在为空字符) |
print(datetime.datetime.strptime('2020/08/09',format('%Y/%m/%d')))
#2020-08-09 00:00:00
print(datetime.datetime.strptime('20-08-09',format('%y-%m-%d')))
#2020-08-09 00:00:00
datetime.strftime()
接收以时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。
dt = datetime.datetime.now()
print("======================")
print('时间:(%Y-%m-%d %H:%M:%S %f): ',dt.strftime( '%Y-%m-%d %H:%M:%S %f' ) )
print('时间:(%Y-%m-%d %H:%M:%S %p): ' , dt.strftime( '%y-%m-%d %I:%M:%S %p' ) )
print('星期缩写%%a: %s ' % dt.strftime( '%a' ))
print('星期全拼%%A: %s ' % dt.strftime( '%A' ))
print('月份缩写%%b: %s ' % dt.strftime( '%b' ) )
print('月份全批%%B: %s ' % dt.strftime( '%B' ))
print('日期时间%%c: %s ' % dt.strftime( '%c' ) )
print('今天是这周的第%s天 ' % dt.strftime( '%w' ) )
print( '今天是今年的第%s天 ' % dt.strftime( '%j' ))
print('今周是今年的第%s周 ' % dt.strftime( '%U' ) )
print('今天是当月的第%s天 ' % dt.strftime( '%d' ))
'''
======================
时间:(%Y-%m-%d %H:%M:%S %f): 2020-09-21 23:30:51 573645
时间:(%Y-%m-%d %H:%M:%S %p): 20-09-21 11:30:51 PM
星期缩写%a: Mon
星期全拼%A: Monday
月份缩写%b: Sep
月份全批%B: September
日期时间%c: Mon Sep 21 23:30:51 2020
今天是这周的第1天
今天是今年的第265天
今周是今年的第38周
今天是当月的第21天
'''
replace(year[,month[,day]])
replace(year[,month[,day]]) 生成并返回一个新的日期对象,原日期对象不变
print(datetime.date.today().replace(year=2019))
date
常用的方法:
1 构造方法 def __init__(self, year: int, month: int, day: int) -> None: ...
print(datetime.date(2019,6,30))
2 replace(year[,month[,day]]) 生成并返回一个新的日期对象,原日期对象不变
print(datetime.date.today().replace(year=2019))
3 d.strftime() 自定义格式化字符串(和time模块的strftime()方法相同)
print(datetime.date.today().strftime('%Y-%m-%d-%a-%I'))
4 d.year d.month d.day
3 时间日期的应用场景
1.简介
2.示例
# 引入模块
import time, datetime
2.1 str
类型的日期转换为时间戳
# 字符类型的时间
testStr = '2020-09-21 23:26:33'
# 转为 时间数组
timeArray = time.strptime(testStr, "%Y-%m-%d %H:%M:%S")
print(timeArray)
# timeArray可以调用tm_year等
print(timeArray.tm_year) # 2020
# 转为时间戳
timeStamp = int(time.mktime(timeArray))
print(timeStamp) # 1600701993
# 结果如下
time.struct_time(tm_year=2020, tm_mon=9, tm_mday=21, tm_hour=23, tm_min=26, tm_sec=33, tm_wday=0, tm_yday=265, tm_isdst=-1)
2020
1600701993
2.2 时间戳转换为指定格式的日期
# 使用time
timeStamp = 1600701993
timeArray = time.localtime(timeStamp)
otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)
print(otherStyleTime) # 2020--09--21 23:26:33
# 使用datetime
timeStamp = 1600101993
dateArray = datetime.datetime.fromtimestamp(timeStamp)
otherStyleTime = dateArray.strftime("%Y--%m--%d %H:%M:%S")
print(otherStyleTime) # 2020--09--15 00:46:33
# 使用datetime,指定utc时间,相差8小时
timeStamp = 1600201993
dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
otherStyleTime = dateArray.strftime("%Y--%m--%d %H:%M:%S")
print(otherStyleTime) # 2020--09--15 20:33:13