python中时间模块time/datetime/calendar的常用用法


python中提供了许多关于时间操作的模块。主要用到的有time、datetime、calendar,这里重点讲一下datetime。首先看一下python中的时间日期格式化符号:

字符串意义
%y两位数的年份表示(00-99)
%Y四位数的年份表示(000-9999)
%m月份(01-12)
%d月内中的一天(0-31)
%H24小时制小时数(0-23)
%I12小时制小时数(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当前时区的名称
%%%号

只要记住常用的几个即可。具体用法可参照下面的一些示例。

1.time模块

time模块中时间表现的格式主要有三种:

  • 1.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
  • 2.struct_time时间元组,共9个元素组成。用一个元组装起来的9组数字。可以通过索引访问相应的值:

在这里插入图片描述
也可以通过属性访问:
在这里插入图片描述

  • 3.format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。

三种格式的相互转化如下:
在这里插入图片描述
下面看一下常用的一些函数:

  1. time.time()
    返回当前时间的时间戳:
import time
time.time()  
# 1586537393.1771245
  1. time.sleep()
    线程将推迟指定的时间后运行下面的代码,单位为秒。其精度为亚秒级。
t1 = time.time()
time.sleep(3)
t2 = time.time()
print(t1-t2)
# -3.0009653568267822
  1. time.localtime()
    将一个时间戳转化为当前地区的一个struct_time()类型元组,未设置默认为当前时间。
print(time.localtime())
# 结果如下
time.struct_time(tm_year=2020, tm_mon=4, tm_mday=11, tm_hour=1, tm_min=8, tm_sec=55, tm_wday=5, tm_yday=102, tm_isdst=0)
  1. time.ctime()
    将一个时间戳(默认为当前时间)转换成一个时间字符串。
localtime = time.asctime( time.localtime(time.time()) )
print(localtime)
# Sat Apr 11 01:12:26 2020
  1. time.strptime()
    time.strptime(‘2020-04-15 08:00:00’, ‘%Y-%m-%d %X’)。 把一个格式化时间字符串转化为struct_time。与time.strftime()互为逆操作。
print(time.strptime('2020-04-15 08:00:00', '%Y-%m-%d %X'))
# time.struct_time(tm_year=2020, tm_mon=4, tm_mday=15, tm_hour=8, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=106, tm_isdst=-1)
  1. time.strftime()
    time.strftime(’%Y-%m-%d %X’, (2020, 1, 6, 8, 20, 56, 0, 6, 0)) 把一个代表时间的元组或者struct_time类型元组转化为格式化的时间字符串。
print(time.strftime('%Y-%m-%d %X', (2020, 1, 6, 8, 20, 56, 0, 6, 0)))
# 2020-01-06 08:20:56

2.datetime模块

datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo。

2.1 date类

date对象由year年份、month月份及day日期三部分构成:datetime.date(year, month, day)

from datetime import date
a = date.today()
print(a) # 2020-04-11
print(a.year) # 2020
print(a.month) # 4
print(a.day) # 11

date对象中还包含了日期比较大小的方法
在这里插入图片描述

from datetime import date
a = date.today()
b= date(2020,1,20)
print(a.__eq__(b)) # False
print( a.__ge__(b)) # True

date类还可以标准化ISO日期:

  1. *.isocalendar()
    返回一个包含三个值的元组,三个值依次为:year年份,week number周数,weekday星期数(周一为1…周日为7)
from datetime import date
a = date(2020,4,11)
print(a.isocalendar())
print(a.isocalendar()[0])
print(a.isocalendar()[1])
print(a.isocalendar()[0])
# 结果如下
(2020, 15, 6)
2020
15
2020
  1. isoformat()
    返回符合ISO 8601标准 (YYYY-MM-DD) 的日期字符串;
a = date(2020,4,11)
print(a.isoformat())
# 2020-04-11
  1. . isoweekday():
    返回符合ISO标准的指定日期所在的星期数(周一为1…周日为7)
a = date(2020,4,11)
print(a.isoweekday())
# 6

还有其他属性方法:
.weekday()
判断某日为星期几,返回0-6数字,星期一是0:

day1 = datetime.date(2020,1,19)
print(day1.weekday()) #6

. timetuple():该方法为了兼容time.localtime()返回一个类型为time.struct_time的数组,但有关时间的部分元素值为0。

a = date(2020,4,11)
print(a.timetuple())
# time.struct_time(tm_year=2020, tm_mon=4, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=102, tm_isdst=-1)

. replace():返回一个替换指定日期字段的新date对象。参数3个可选参数,分别为year,month,day。注意替换是产生新对象,不影响原date对象。

a = date(2020,4,11)
b = a.replace(2020,1,24)
print(a) # 2020-04-11
print(b) # 2020-01-24

.weekday()方法与isoweekday()类似,但是返回的周一为 0, 周日为 6。
.strftime(fmt):把日期转为格式化字符串:

a = date(2020,4,11)
print(a.strftime("%Y%m%d")) # 20200411

2.2 time类

time类由hour小时、minute分钟、second秒、microsecond毫秒和tzinfo五部分组成:
datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] )

import datetime
a = datetime.time(2,24,25,899)
print(a) # 02:24:25.000899
print(a.hour) # 2
print(a.minute) # 24
print(a.second) # 25

time对象也可以比较大小,方法与date相同。
time对象的其他属性和和方法:

  1. .replace([ hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ):创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性(原有对象仍保持不变)
  2. .isoformat():返回型如"HH:MM:SS"格式的字符串表示;
  3. t1.strftime(fmt):格式化时间字符串;

2.3 datetime类

datetime类其实是可以看做是date类和time类的合体,其大部分的方法和属性都继承于这二个类。
datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
下面看一下datetime常见的方法属性:

import datetime
a = datetime.datetime.now()
print(a) # 2020-04-11 02:40:51.045794
print(a.date()) # 2020-04-11
print(a.time()) # 02:40:51.045794

datetime的strptime和strftime:
datetime.strptime():把字符串格式的日期转为datetime类型的日期。

a = datetime.datetime.strptime('2020-1-24 18:20:20', '%Y-%m-%d %H:%M:%S')
print(type(a)) # <class 'datetime.datetime'>
print(a) # 2020-01-24 18:20:20

datetime.strftime():把日期类型转为字符串类型。

now = datetime.datetime.now()
print(now.strftime('%a, %b %d %H:%M'))
# Sat, Apr 11 02:49

2.4 timedelta类

使用timedelta可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算,如果要计算月份则需要另外的办法。
此类对象包含以下属性
1、days:天数
2、microseconds:微秒数(>=0 并且 <1秒)
3、seconds:秒数(>=0 并且 <1天)

import datetime
a = datetime.datetime.now()
b = a + datetime.timedelta(days=-1) # 昨天
c = a - datetime.timedelta(days=1) #昨天
print(b) # 2020-04-10 02:55:43.693713
print(c) # 2020-04-10 02:55:43.693713
delta1 = b-a 
print(delta1) # -1 day, 0:00:00
print(type(delta1)) # <class 'datetime.timedelta'>
print(delta1.days) #-1 
# 可以通过此方法获取时间差

3. calendar

此模块的函数都是日历相关的,例如打印某月的字符月历。
这里不做重点,简单看一下函数有哪些,知道大概如何使用就行。

  1. calendar.calendar(year,w=2,l=1,c=6)
    返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。
  2. calendar.firstweekday( )
    返回当前每周起始日期的设置。默认情况下,首次载入 calendar 模块时返回 0,即星期一。
  3. calendar.isleap(year)
    是闰年返回 True,否则为 False。
  4. calendar.leapdays(y1,y2)
    返回在Y1,Y2两年之间的闰年总数。
  5. calendar.month(year,month,w=2,l=1)
    返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。
  6. calendar.monthcalendar(year,month)
    返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。
  7. calendar.monthrange(year,month)
    返回两个整数。第一个是该月的星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到12。
  8. calendar.prcal(year,w=2,l=1,c=6)
    相当于 print calendar.calendar(year,w=2,l=1,c=6)。
  9. calendar.prmonth(year,month,w=2,l=1)
    相当于 print calendar.month(year,month,w=2,l=1) 。
  10. calendar.setfirstweekday(weekday)
    设置每周的起始日期码。0(星期一)到6(星期日)。
  11. calendar.timegm(tupletime)
    和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间戳(1970纪元后经过的浮点秒数)。
  12. calendar.weekday(year,month,day)
    返回给定日期的日期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。

最后一个可以用来计算某个日期属于星期几,用到的可能性大点。

参考:https://www.cnblogs.com/awakenedy/articles/9182036.html
https://www.runoob.com/python/python-date-time.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ethan-running

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值