1、核心逻辑

time,表示时间的类
datetime,表示日期和时间的类
timedelta,表示时间间隔,即两个时间点的间隔
tzinfo,与时区有关的信息
( 这些类的对象都是不可变的 )
(类有类方法,类方法里有方法,方法继承了类方法)

2、datetimedatetime对象

下面介绍最基本3个对象的最基本用法。首先,从datetime模块导入3个对象

  1. In [1]: from datetime import date,time,datetime

构造一个日期date实例,2020年9月1日:

  1. In [2]: date(2020,9,1)
  2. Out[2]: datetime.date(2020, 9, 1)

构造一个时间time实例,10点10分0秒:

  1. In [3]: time(10,10,0)
  2. Out[3]: datetime.time(10, 10)

构造一个日期+时间的完整datetime实例,2020年9月1日 10点10分0秒:

  1. In [4]: datetime(2020,9,1,10,10,10)
  2. Out[4]: datetime.datetime(2020, 9, 1, 10, 10, 10)

datatime

datetime.now() & datetime.today()

  1. import datetime
  2. print(datetime.datetime.now())
  3. # datetime.today()
  4. #2020-09-21 23:13:05.245157
  5. print(datetime.datetime.today())
  6. #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 时区的名字(如果不存在为空字符)
  1. print(datetime.datetime.strptime('2020/08/09',format('%Y/%m/%d')))
  2. #2020-08-09 00:00:00
  3. print(datetime.datetime.strptime('20-08-09',format('%y-%m-%d')))
  4. #2020-08-09 00:00:00

datetime.strftime()

接收以时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。

  1. dt = datetime.datetime.now()
  2. print("======================")
  3. print('时间:(%Y-%m-%d %H:%M:%S %f): ',dt.strftime( '%Y-%m-%d %H:%M:%S %f' ) )
  4. print('时间:(%Y-%m-%d %H:%M:%S %p): ' , dt.strftime( '%y-%m-%d %I:%M:%S %p' ) )
  5. print('星期缩写%%a: %s ' % dt.strftime( '%a' ))
  6. print('星期全拼%%A: %s ' % dt.strftime( '%A' ))
  7. print('月份缩写%%b: %s ' % dt.strftime( '%b' ) )
  8. print('月份全批%%B: %s ' % dt.strftime( '%B' ))
  9. print('日期时间%%c: %s ' % dt.strftime( '%c' ) )
  10. print('今天是这周的第%s天 ' % dt.strftime( '%w' ) )
  11. print( '今天是今年的第%s天 ' % dt.strftime( '%j' ))
  12. print('今周是今年的第%s周 ' % dt.strftime( '%U' ) )
  13. print('今天是当月的第%s天 ' % dt.strftime( '%d' ))
  14. '''
  15. ======================
  16. 时间:(%Y-%m-%d %H:%M:%S %f): 2020-09-21 23:30:51 573645
  17. 时间:(%Y-%m-%d %H:%M:%S %p): 20-09-21 11:30:51 PM
  18. 星期缩写%a: Mon
  19. 星期全拼%A: Monday
  20. 月份缩写%b: Sep
  21. 月份全批%B: September
  22. 日期时间%c: Mon Sep 21 23:30:51 2020
  23. 今天是这周的第1天
  24. 今天是今年的第265天
  25. 今周是今年的第38周
  26. 今天是当月的第21天
  27. '''

replace(year[,month[,day]])

  1. replace(year[,month[,day]]) 生成并返回一个新的日期对象,原日期对象不变
  2. print(datetime.date.today().replace(year=2019))

date

  1. 常用的方法:
  2. 1 构造方法 def __init__(self, year: int, month: int, day: int) -> None: ...
  3. print(datetime.date(2019,6,30))
  4. 2 replace(year[,month[,day]]) 生成并返回一个新的日期对象,原日期对象不变
  5. print(datetime.date.today().replace(year=2019))
  6. 3 d.strftime() 自定义格式化字符串(和time模块的strftime()方法相同)
  7. print(datetime.date.today().strftime('%Y-%m-%d-%a-%I'))
  8. 4 d.year d.month d.day

3 时间日期的应用场景

1.简介

在编写代码时,往往涉及时间、日期、时间戳的相互转换

2.示例

  1. # 引入模块
  2. import time, datetime

2.1 str类型的日期转换为时间戳

  1. # 字符类型的时间
  2. testStr = '2020-09-21 23:26:33'
  3. # 转为 时间数组
  4. timeArray = time.strptime(testStr, "%Y-%m-%d %H:%M:%S")
  5. print(timeArray)
  6. # timeArray可以调用tm_year等
  7. print(timeArray.tm_year) # 2020
  8. # 转为时间戳
  9. timeStamp = int(time.mktime(timeArray))
  10. print(timeStamp) # 1600701993
  11. # 结果如下
  12. 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)
  13. 2020
  14. 1600701993

2.2 时间戳转换为指定格式的日期

  1. # 使用time
  2. timeStamp = 1600701993
  3. timeArray = time.localtime(timeStamp)
  4. otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)
  5. print(otherStyleTime) # 2020--09--21 23:26:33
  6. # 使用datetime
  7. timeStamp = 1600101993
  8. dateArray = datetime.datetime.fromtimestamp(timeStamp)
  9. otherStyleTime = dateArray.strftime("%Y--%m--%d %H:%M:%S")
  10. print(otherStyleTime) # 2020--09--15 00:46:33
  11. # 使用datetime,指定utc时间,相差8小时
  12. timeStamp = 1600201993
  13. dateArray = datetime.datetime.utcfromtimestamp(timeStamp)
  14. otherStyleTime = dateArray.strftime("%Y--%m--%d %H:%M:%S")
  15. print(otherStyleTime) # 2020--09--15 20:33:13