【python】内置模块-time & datetime & calendar-处理时间

time模块

方法及属性

函数说明
time.altzone返回格林威治西部的夏令时地区的偏移秒数
time.timezone是当地时区(未启动夏令时)距离格林威治的偏移秒数
time.tzname是当地时区(未启动夏令时)距离格林威治的偏移秒数
time.localtime([secs])接收时间戳(1970纪元后经过的浮点秒数)并返回当地时间下的时间元组t,不给参数显示当前时间元祖
time.gtime([secs])接收时间戳(1970纪元后经过的浮点秒数)并返回格林威治天文时间下的时间元组t
time.time()返回当前时间的时间戳(1970纪元后经过的浮点秒数)
time.mktime([tupletime])接受时间元组并返回时间戳(1970纪元后经过的浮点秒数)
time.sleep(secs)延迟运行,secs为秒数
time.asctime([tupletime])接受时间元组并返回一个可读的形式为"Tue Dec 11 18:07:14 2008"(2008年12月11日周二18时07分14秒)的24个字符的字符串,不给参数显示当前时间字符串
time.clock()用以浮点数计算的秒数返回当前的CPU时间
time.ctime([secs])作用相当于asctime(localtime(secs)),未给参数相当于asctime()
time.strftime(fmt[,tupletime])接收以时间元组,并返回以可读字符串表示的当地时间,格式由fmt决定
time.strptime(str,fmt)根据fmt的格式把一个时间字符串解析为时间元组
time.tzset()根据环境变量TZ重新初始化时间相关设置(windows不可用)

说明

时间元组

time.struct_time(tm_year=2020, tm_mon=11, tm_mday=4, tm_hour=11, tm_min=0, tm_sec=26, tm_wday=2, tm_yday=309, tm_isdst=0)

属性说明
tm_year4位数年
tm_mon
tm_mday
tm_hour小时,0 到 23
tm_min分钟,0 到 59
tm_sec秒,0 到 61 (60或61 是闰秒)
tm_wday一周的第几日, 0到6 (0是周一)
tm_yday一年的第几日, 1 到 366(儒略历)
tm_isdst夏令时,-1, 0, 1, -1是决定是否为夏令时的旗帜

时间格式化符号

符号说明
%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),星期天为 0,星期一为 1,以此类推。
%W一年中的星期数(00-53)星期一为星期的开始
%x本地相应的日期表示
%X本地相应的时间表示
%Z当前时区的名称
%%%号本身

示例

import time,os

print('time.altzone:', time.altzone)
print('time.timezone:', time.timezone)
a, b = time.tzname[0], time.tzname[1]
print('time.tzname:', a.encode('latin-1').decode('gbk'))
print('time.tzname:', b.encode('latin-1').decode('gbk'))
t = time.localtime()
print('time.localtime():', t)
print('time.asctime():', time.asctime())
# print(time.sleep(10))

print('time.clock():', time.clock())
print('time.gmtime():', time.gmtime())
print('time.mktime():', time.mktime(t))
print('time.time():', time.time())
print('time.strftime():', time.strftime('%Y-%m-%d %H:%M:%S'))
print('time.strptime():', time.strptime("2020-11-04 10:49:02", '%Y-%m-%d %H:%M:%S'))
# linux可用,windows无
os.environ['TZ'] = 'AEST-10AEDT-11,M10.5.0,M3.5.0'
time.tzset()
print (time.strftime('%X %x %Z'))

datetime

常量

常量说明
datetime.MINYEARdate 或者 datetime 对象允许的最小年份, 常量 MINYEAR 是 1
datetime.MAXYEARdate 或 datetime 对象允许最大的年份,常量 MAXYEAR 是 9999

类型

datetime.date

时间的日期部分

  • 说明

    类/方法/属性说明
    date(year, month, day)日期时间
    date.today()返回当前的本地日期
    date.fromtimestamp(timestamp)返回对应于 POSIX 时间戳的当地时间
    date.fromtimestamp(timestamp)返回对应于 POSIX 时间戳的当地时间
    date.min最小的日期
    date.max最大的日期
    date.resolution两个日期对象的最小间隔
    date.year
    date.month
    date.day
    d.replace(year=self.year, month=self.month, day=self.day)替换某个时间属性
    d.weekday()返回一个星期的第几天,6代表周日
    d.isoweekday()返回星期几,7代表周日
    d.isoformat()格式化时间
    d.ctime()返回一个表示日期的字符串
    d.strftime(format)格式化时间

    其中d代表时间对象

  • 示例

    from datetime import date
    
    print(date(2008, 1, 1))
    print(date.today())
    print(date.fromtimestamp(time.time()))
    d = date.fromtimestamp(time.time())
    print(d.replace(day=26))
    print(d.weekday())
    print(d.isoweekday())
    print(d.isoformat())
    print(d.ctime())
    print(d.strftime("%d/%m/%y"))
    

datetime.time

时间的时分秒部分

  • 说明
    类/方法/属性说明
    time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)时间
    t.min/t.max/t.resolution最早/最晚/最小的差
    t.hour/t.minute/t.second时/分/秒
    t.replace(hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)替换某个时间属性
    t.strftime(farmat)返回一个由显式格式字符串所指明的代表时间的字符串性
  • 示例
    from datetime import time, datetime
    
    print(time(10, 10, 10))
    t = datetime.now()
    print(t.min, t.max, t.hour, t.minute, t.second)
    print(t.replace(hour=2))
    print(t.ctime())
    print(t.strftime("%H-%M-%S"))
    

datetime.datetime

  • 说明
    类/方法/属性说明
    datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)详细时间
    datetime.today()返回当前的本地时间
    datetime.now()返回当前的本地时间
    datetime.utcnow()返回当前的utc时间
    datetime.fromtimestamp(timestamp)将时间戳格式化
    datetime.utcfromtimestamp(timestamp)将时间戳格式化UTC
    datetime.strptime(date_string,format)格式化时间
    d.min最早的datetime
    d.max最大的datetime
    d.resolution两个不相等的 datetime 对象之间可能的最小间隔
    d.year/d.month/d.day/d.hour/d.minute/d.second年/月/日/时/分/秒
    d.date()date对象
    d.time()time对象
    d.timetz()time对象
    d.replace(year=self.year, month=self.month, day=self.day, hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, * fold=0)替换时间
    d.astimezone(tz=None)具有tz属性的时间对象
    d.utcoffset()如果 tzinfo 为 None,则返回 None
    d.dst()如果 tzinfo 为 None,则返回 None
    d.tzname()如果 tzinfo 为 None,则返回 None
    d.timetuple()时间元组
    d.utctimetuple()utc时间元组
    d.toordinal()返回日期的预期格列高利历序号
    d.timestamp()时间戳
    d.weekday()星期几,0代表周一
    d.isoweekday()星期几,1代表周一
    d.isocalendar()返回一个由三部分组成的 named tuple: year, week 和 weekday
    d.ctime()返回一个表示日期和时间的字符串
    d.strftime(farmat)返回一个由显式格式字符串所指明的代表日期和时间的字符串
    其中d代表时间对象
  • 示例
    from datetime import datetime
    
    print(datetime(2008, 10, 10))
    print(datetime.today())
    print(datetime.now())
    print(datetime.utcnow())
    t = time.time()
    print(datetime.fromtimestamp(t))
    print(datetime.utcfromtimestamp(t))
    print(datetime.strptime('2005-01-01 10:10:10', "%Y-%m-%d %H:%M:%S"))
    d = datetime.now()
    print(d.min)
    print(d.max)
    print(d.resolution)
    print(d.year)
    print(d.date())
    print(d.time())
    print(d.timetz())
    print(d.replace(year=2006))
    print(d.astimezone())
    print(d.utcoffset())
    print(d.tzname())
    print(d.timetuple())
    print(d.utctimetuple())
    print(d.toordinal())
    print(d.timestamp())
    print(d.weekday())
    print(d.isoweekday())
    print(d.isocalendar())
    print(d.ctime())
    print(d.strftime('%Y-%m-%d %H:%M:%S'))
    

datetime.timedelta

表示两个date/time的时间间隔

  1. 语法:class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

  2. 类属性

    属性说明
    timedelta.min负数最大时间差,相当于timedelta(-999999999)
    timedelta.max正数最大时间差,相当于timedelta(days=999999999, hours=23, minutes=59, seconds=59, microseconds=999999)。
    timedelta.resolution两个时间的最小差值 相当于timedelta(microseconds=1)
  3. 使用示例

    import datetime
    
    print('datetime.MINYEAR', datetime.MINYEAR)
    print('datetime.MAXYEAR', datetime.MAXYEAR)
    
    from datetime import timedelta
    
    d = timedelta(microseconds=-1)
    print(d.days, d.seconds, d.microseconds)
    today = datetime.datetime.now().date()
    print(today)
    yesterday = today - timedelta(days=1)
    print(yesterday)
    shangzhou = today - timedelta(weeks=1)
    

更多详阅官方文档

Calendar-日历

可以输出像Unix cal那样的日历,还提供了其他与日历相关的实用函数,默认情况下,这些日历把星期一当做一周的第一天,星期天为一周的最后一天

全局性参数说明
w每个单元格宽度,默认0,内部已做处理,最小宽度为2,
l每列换l行,默认为0,内部已做处理,至少换行1行,
c表示月与月之间的间隔宽度,默认为6,内部已做处理,最小宽度为2,
m表示将12个月分为m列

模块属性/方法

方法/属性说明
setfirstweekday()指定一周的第一天,0为周一,6为周日
firstweekday()返回一周的第一天,0为周一,6为周日
isleap(year)判断指定年是否为闰年
leapdays(year1,year2)返回year1与year2年份之间的闰年数量,包前不包后
weekday(year,month,day)获取指定日期为星期几,0为周一,6为周日
weekheader(n)返回包含星期的英文缩写,n表示英文缩写所占的宽度
monthrange(year,month)返回一个由一个月第一个天的星期与当前月的天数组成的元组
monthcalendar(year,month)返回一个月中天数列表(不是当前月份的天数为0),按周划分,为一个二维数组
prmonth(year,month,w=0,l=0)打印一个月的日历
month(year,month,w=0,l=0)返回一个月的日历字符串
prcal(year, w=0, l=0, c=6, m=3)打印一年的日历
calendar(year, w=0, l=0, c=6, m=3)返回一年的日历字符串

示例

import calendar

calendar.setfirstweekday(6)
print(calendar.firstweekday())
print(calendar.isleap(2020))
print(calendar.isleap(2021))
print(calendar.leapdays(2000, 2020))
print(calendar.weekday(2020, 11, 10))
print(calendar.weekheader(4))
print(calendar.monthrange(2020, 11))
print(calendar.monthcalendar(2020, 11))
calendar.prmonth(2020, 11)
print(calendar.month(2020, 11))
calendar.prcal(2020, m=4)
print(calendar.calendar(2020, m=4))

calendar.Calendar(firstweekday=0)类

firstweekday为一个整数,指定一周的第一天,0是星期一(默认),6为星期日

  • 以下迭代方法/属性均包括月份开始那周的所有日期和月份结束那周的所有日期
  • width表示将一年中12个月份进行划分,每width个月为一份,每一份包含各个月份,每个月份包含周,每周包含日期信息
方法/属性说明
iterweekdays()获取一周的数字的迭代器,第一个值与firstweekday的值相同
itermonthdates(year,month)获取一个月日期的迭代器,此迭代器会返回指定月份的所有日期,
itermonthdays(year,month)返回一个月天数的迭代器(不是当前月份的天数为0),此迭代器将返回指定月份的日期数字
itermonthdays2(year,month)返回一个月天数与星期的迭代器(不是当前月份的天数为0),此迭代器将返回指定月份的日期数字与星期几所代表的数字组成的元组
monthdatescalendar(year,month)返回一个月日期列表,按周划分,为一个二维数组
monthdayscalendar(year,month)返回一个月中天数列表(不是当前月份的天数为0),按周划分,为一个二维数组
monthday2scalendar(year,month)返回一个月中天数与星期的列表(不是当前月份的天数为0),按周划分,为一个二维数组
yeardatescalendar(year,width=3)返回一年中所有的日期,为一个4维数组。
yeardayscalendar(year,width=3)返回一年中每个月的天数,为一个4维数组
yeardays2calendar(year,width=3)返回一年中农每个月的天数与星期的元组,为一个4维的元组列表

示例

from calendar import Calendar

c = Calendar()
# c = Calendar(firstweekday=6)
print(list(c.iterweekdays()))
print(list(c.itermonthdates(2020, 11)))
print(list(c.itermonthdays(2020, 11)))
print(list(c.itermonthdays2(2020, 11)))
print(list(c.monthdatescalendar(2020, 11)))
print(list(c.monthdayscalendar(2020, 11)))
print(list(c.monthdays2calendar(2020, 11)))
print(list(c.yeardatescalendar(2020)))
print(list(c.yeardayscalendar(2020)))
print(list(c.yeardays2calendar(2020)))

calendar.TextCalendar(firstweekday=0)类

firstweekday为一个整数,指定一周的第一天,0是星期一(默认),6为星期日

方法/属性说明
formatmonth(year,month,w=0, l=0)以多行字符串形式返回一个月的日历
prmonth(year,month,w=0, l=0)打印一个月日历
formatyear(year,w=2, l=1,c=6,m=3)以多行字符串形式返回一年的日历
pryear(year,w=2, l=1,c=6,m=3)打印年日历

示例

from calendar import TextCalendar

# c = TextCalendar()
c = TextCalendar(firstweekday=6)
print(c.formatmonth(2020, 11))
print(c.formatyear(2020, m=4))
c.prmonth(2020, 11)
c.pryear(2020, m=3)

calendar.HTMLCalendar(firstweekday=0)类

firstweekday为一个整数,指定一周的第一天,0是星期一(默认),6为星期日

方法/属性说明
formatmonth(year,month,withyear=True)返回一个月日历的html内容,withyear是否显示年份,默认为True,即显示年份
formatyear(year,width=3)返回一年日历的html内容
formatyearpage(year, width=3, css='calendar.css', encoding=None)返回一年日历的html内容,width表示将12个月分为width列,css可自定义css样式,encoding编码方式

示例

from calendar import HTMLCalendar

# c = HTMLCalendar()
c = HTMLCalendar(firstweekday=6)
print(c.formatmonth(2020, 11, withyear=True))
print(c.formatyear(2020, width=3))
print(c.formatyearpage(2020, width=3))
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值