常用模块——time、datetime、calendar
4. 时间相关模块
Python
中表示时间的格式主要有三种:
timestamp(时间戳)
:时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。stuct_time
:时间元组,共有9个元素,包括(tm_year
:年、tm_mon
:月、tm_mday
:日、tm_hour
:时、tm_min
:分、tm_sec
:秒、tm_wday
:星期几、tm_yday
:一年中的第几天、tm_isdst
:是否是夏令时)。format time
:格式化时间,已格式化的结构使时间更具可读性。
4.1 time模块
4.1.1 time模块常用函数
time.time()
:返回当前时间的时间戳。time.localtime()
:将一个时间戳转换为当前时区的struct_time
格式,其默认值为time.time()
获得的时间戳。time.gmtime()
:将一个时间戳转换为UTC
时区的struct_time
格式时间,其默认值为time.time()
获得的时间戳。time.mktime()
:将一个struct_time
格式时间转换为时间戳格式。time.sleep()
:线程推迟指定的时间运行。time.asctime()
:将一个struct_time
转换成形如Sat Jan 9 17:23:43 2021
这种格式显示,默认参数为time.localtime()
获得的struct_time
。time.ctime()
:将一个时间戳转换成形如time.asctime()
函数返回的格式相同的形式显示,其传入的默认值为time.time()
获得的时间戳。time.strftime(format, t)
:将一个strut_time
转换为format
格式字符串。如果不传入t
,则默认为time.localtime()
返回的strut_time
,format
参数格式将在后面给出。time.strptime(string, format)
:将一个格式化字符串时间转化为struct_time
格式,format
默认为:%a %b %d %H:%M:%S %Y
。time.monotonic()
:返回系统系统启动后从0开始递增的时间。time.perf_counter()
:返回性能计数器的值(以小数秒为单位)作为浮点数,即具有最高可用分辨率的时钟,以测量短持续时间。 它确实包括睡眠期间经过的时间,并且是系统范围的。time.process_time()
:返回当前进程的系统和用户CPU时间总和的值(以小数秒为单位)。它不包括睡眠期间经过的时间。根据定义,它在整个进程范围中。
4.1.2 格式化字符串支持的符号
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化月份名称
%B 本地完整月份名称
%c 本地相应的日期和时间的字符串表示,如: Thu Jan 1 08:00:08 1970
%d 十进制数表示的一个月中第几天
%H 十进制数表示小时,24小时制
%I 十进制数表示小时,12小时制
%j 十进制数表示一年中的第几天,000-366
%m 十进制数表示月,00-12
%M 十进制数表示分钟,00-59
%p 本地相应的AM或PM
%S 十进制数表示的秒,00-61
%U 十进制数表示一年中的第几周,00-53,星期日作为一周中的第一天,在第一个星期日之前的新年中的所有日子都被认为是第0周。
%w 十进制数表示一周中的第几天,0-6,其中0表示星期日
%W 十进制数表示一年中的第几周,00-53,星期一作为一周中的第一天,在第一个星期一之前的新年中的所有日子都被认为是第0周。
%x 本地相应的日期字符串,格式如:01/11/21
%X 本地相应的时间字符串,格式如:09:59:27
%y 去掉世纪表示的年份,只有后两位
%Y 十进制数表示的带世纪的年份
%z 时区偏移
%Z 时区名称
%% 表示%
在使用上述格式化字符串打印时如果有中文可能会出现乱码的情况,我们可以使用如下方式解决:
import time
import locale
locale.setlocale(locale.LC_CTYPE, 'chinese')
print(time.strftime('%z %Z', time.localtime()))
4.1.3 时间格式转换图
4.2 datetime模块
该模块对time
模块进行了封装,提供了更多的接口,它里面有date、time、datetime、timedelta、tzinfo、timezone
类。
4.2.1 date类
实例化方法:date(year, month, day)
常用方法
date.today()
:返回当前本地日期的date
对象。date.fromtimestamp(timestamp)
:根据给定的时间戳返回一个date
对象。date.fromisoformat(date_string)
:根据给定的时间字符串返回一个date
对象,字符串格式为YYYY-MM-DD
。replace(year, month, day)
:生成一个新的date
对象,用参数指定的年月日代替原有对象中的年月日,原有对象的年月日不变。timetuple()
:返回日期对应的struct time
对象。weekday()
:返回星期几,星期一返回0,星期二返回1,以此类推。isoweekday()
:返回星期几,星期一返回1,星期二返回2,以此类推。isocalendar()
:返回包含年月日的元组。isoformat()
:返回格式化的字符串,与直接print
出的字符串相同。strftime(fmt)
:返回指定格式的日期字符串,参数fmt
与time
模块中的用法相同。ctime()
:与time.ctime()
返回的字符串格式相同,但是它不能传入时间戳参数。
4.2.2 time类
实例化方法:time([hour[, minute[, second[, microsecond[, tzinfo]]]]])
常用属性和方法
hour、minute、second、microsecond
:分别表示时、分、秒、微秒。tzinfo
:时区信息。replace([hour[, minute[, second[, microsecond[, tzinfo]]]]])
:创建一个新的time
对象,使用传入的参数代替原有对象的参数,返回一个替换后的对象,原有对象保持不变。isoformat()
:返回指定格式的时间字符串,默认返回的格式为HH:MM:SS
,可以根据参数指定返回到哪一位,参数可选hours、minutes、seconds、milliseconds、microseconds
,默认为auto
。strftime(fmt)
:可传入指定格式的时间字符串,参数fmt
与time
模块中的用法相同。
4.2.3 datetime类
实例化方法:datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
。
常用属性和方法
datetime.today()
:返回当前本地时间的datetime
对象。datetime.now()
:返回当前本地时间的datetime
对象,如果提供了tz
参数,则返回tz
参数对应时区的本地时间。datetime.utcnow()
:返回一个当前UTC
时间的datetime
对象。datetime.fromtimestamp(timestamp[, tz])
:根据时间戳创建一个datetime
对象,参数tz
指定时区信息。datetime.utcfromtimestamp(timestamp)
:根据时间戳创建一个datetime
对象。datetime.combine(date, time)
:根据date
对象和time
对象创建一个datetime
对象。datetime.strptime(date_string, format)
:将格式化字符串转换为datetime
对象。date()
:获取datetime
对象对应的date
对象。time()
:获取datetime
对象对应的time
对象。replace(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
:用给定的参数代替datetime
对象中的对应值,返回替换后的datetime
对象,原对象中的值不变。
此外还有一些方法与time
类和date
类中的方法用法相同不再赘述。
4.2.4 timedelta类
timedelta
类是一个用于做时间加减的类,它可以在日期上做天、小时、分钟、秒、毫秒、微秒级别上的时间计算,如果要计算月份则需要另外的方案。
# 简单示例
import datetime
today = datetime.datetime.now()
tomorrow = today + datetime.timedelta(days=1)
print(tomorrow)
示例中写了加一天的情况,加小时、分钟等情况只需要将传入的参数修改一下即可。
timedelta
类中还有一个方法total_seconds
用来计算间隔时间的秒数。
4.2.5 tzinfo类
这是一个抽象的基类,这个类不可以直接被实例化。使用的时候必须从该类中派生出一个子类。派生出的子类中必须实现tzinfo
类中指定的必须实现的类。
4.2.6 timezone类
它是tzinfo
的一个子类,它的每个实例代表一个由与UTC
的固定差值所定义的时区。
它的实例化方法为:timezone(offset, name=None)
。
主要的属性和方法
timezone.utcoffset(dt)
:返回在构造timezone
实例时指定的固定值。timezone.tzname(dt)
:返回在构造timezone
实例时指定的固定值。timezone.dst(dt)
:返回None
。timezone.fromutc(dt)
:返回dt + offset
。timezone.utc
:UTC
时区。
4.3 calendar模块
提供了一些与日历相关的功能。默认情况下,这些日历将星期一作为一周的第一天,将星期日作为一周的最后一天。
4.3.1 常用的属性和方法
setfirstweekday(firstweekday)
:指定一周的第一天,其中0表示周星期一,1表示星期二,以此类推。firstweekday()
:返回一周的第一天,这里同样是0表示星期一。isleap(year)
:判断指定年份是否为闰年,是返回True
,否则返回False
。weekday(year, month, day)
:获取指定日期为星期几。weekheader(n)
:返回包含星期的英文单词的缩写,其中n表示英文缩写所占的宽度。monthrange(year, month)
:返回指定月份第一天是星期几和指定月份一共有几天。monthcalendar(year, month)
:返回一个月中天数列表,按周划分为一个二维数组。prmonth(theyear, themonth, w=0, l=0)
:打印一个月的日历,theyear
指定年份,themonth
指定月份,w
每个单元格宽度,默认0,最小宽度为2,l
每列换l行,默认为0,至少换行1行month(theyear, themonth, w=0, l=0)
:返回一个月的日历的多行文本字符串,参数与上面函数参数含义相同。prcal(year, w=0, l=0, c=6, m=3)
:打印一年的日历,w
每个单元格宽度,默认0,最小宽度为2,l
每列换l行,默认为0,至少换行1行,c
表示月与月之间的间隔宽度,默认为6,最小宽度为2,m
表示将12个月分为m列。calendar(year, w=2, l=1, c=6, m=3)
:返回一年日历的字符串,参数含义与上一个函数参数含义相同。
4.3.2 calendar模块中的类
该模块中主要有5个类,分别为:Calendar、TextCalendar、HTMLCalendar、LocaleTextCalendar、LocaleHTMLCalendar
。
1. Calendar类
iterweekdays()
:获取一周的数字的迭代器,迭代器的第一个值与firstweekday
的值相同。itermonthdates(year, month)
:获取一个月日期的生成器,它会返回指定月份的所有日期,包括月份开始那周的所有日期和月份结束那周的所有日期。itermonthdays(year, month)
:获取指定月份日的生成器,它会返回指定月份所有日期的日,月份开始那周的所有值均为0。itermonthdays2(year, month)
:将会返回日和星期几的元组。itermonthdays3(year, month)
:将会返回年、月、日组成的元组。itermonthdays4(year, month)
:将会返回年、月、日和星期几组成的元组。monthdatescalendar(year, month)
:将会返回一个包含年月日的datetime.date
对象,按周划分。monthdayscalendar(year, month)
:返回一个月中天数列表,以周划分,monthdays2calendar(year, month)
:返回一个月中天数与星期的列表,不是当月天数用0表示,按周划分。
同样的按年也有类似的划分,不再赘述。
2. TextCalendar类
它是Calendar
的子类。
formatmonth(theyear, themonth, w=0, l=0)
:以多行字符串形式返回一个月的日历。theyear
指定年,themonth
指定月,w
每个单元格宽度,默认0,最小宽度为2,l
每列换l行,默认为0,至少换行1行。prmonth(theyear, themonth, w=0, l=0)
:打印上一个函数的结果。formatyear(theyear, w=2, l=1, c=6, m=3)
:以多行字符串形式返回一年的日历,w
每个单元格宽度,默认0,最小宽度为2,l
每列换l行,默认为0,至少换行1行,c
月与月之间的间隔宽度,默认为6,最小宽度为2,m
表示将12个月分为m列。pryear(theyear, w=2, l=1, c=6, m=3)
:将上一个函数的返回值打印。
3. HTMLCalendar类
Calendar
的子类,主要用于生成html
格式的字符串。
formatmonth(theyear, themonth, withyear=True)
:返回一个月日历的html
内容,withyear
是否显示年份,默认为True,即显示年份。formatyear(theyear, width=3)
:返回一年日历的html
内容,width
表示将12个月分为width
列。formatyearpage(theyear, width=3, css='calendar.css', encoding=None)
:返回一年日历的html
内容,width
表示将12个月分为width
列,css
可自定义css
样式,encoding
编码方式。
LocaleTextCalendar、LocaleHTMLCalendar
这两个类用法与上面两个差不多,只是可以指定特定地点,也就是本地化环境。
import calendar
c = calendar.LocaleTextCalendar(locale='fr_FR.UTF-8')
c.prmonth(2021, 1)
#=======output=====
janvier 2021
lu ma me je ve sa di
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
如有错误欢迎批评指正!!