Python基础(13)——常用模块(二)

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模块常用函数

  1. time.time():返回当前时间的时间戳。
  2. time.localtime():将一个时间戳转换为当前时区的struct_time格式,其默认值为time.time()获得的时间戳。
  3. time.gmtime():将一个时间戳转换为UTC时区的struct_time格式时间,其默认值为time.time()获得的时间戳。
  4. time.mktime():将一个struct_time格式时间转换为时间戳格式。
  5. time.sleep():线程推迟指定的时间运行。
  6. time.asctime():将一个struct_time转换成形如Sat Jan 9 17:23:43 2021这种格式显示,默认参数为time.localtime()获得的struct_time
  7. time.ctime():将一个时间戳转换成形如time.asctime()函数返回的格式相同的形式显示,其传入的默认值为time.time()获得的时间戳。
  8. time.strftime(format, t):将一个strut_time转换为format格式字符串。如果不传入t,则默认为time.localtime()返回的strut_timeformat参数格式将在后面给出。
  9. time.strptime(string, format):将一个格式化字符串时间转化为struct_time格式,format默认为:%a %b %d %H:%M:%S %Y
  10. time.monotonic():返回系统系统启动后从0开始递增的时间。
  11. time.perf_counter():返回性能计数器的值(以小数秒为单位)作为浮点数,即具有最高可用分辨率的时钟,以测量短持续时间。 它确实包括睡眠期间经过的时间,并且是系统范围的。
  12. 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 时间格式转换图

strptime
strftime
mktime
localtime/gmtime
format_time
struct_time
time_stamp
asctime
ctime
struct_time
%a %b %d %H:%M:%S %Y串
time stamp

4.2 datetime模块

该模块对time模块进行了封装,提供了更多的接口,它里面有date、time、datetime、timedelta、tzinfo、timezone类。

4.2.1 date类

实例化方法:date(year, month, day)

常用方法

  1. date.today():返回当前本地日期的date对象。
  2. date.fromtimestamp(timestamp):根据给定的时间戳返回一个date对象。
  3. date.fromisoformat(date_string):根据给定的时间字符串返回一个date对象,字符串格式为YYYY-MM-DD
  4. replace(year, month, day):生成一个新的date对象,用参数指定的年月日代替原有对象中的年月日,原有对象的年月日不变。
  5. timetuple():返回日期对应的struct time对象。
  6. weekday():返回星期几,星期一返回0,星期二返回1,以此类推。
  7. isoweekday():返回星期几,星期一返回1,星期二返回2,以此类推。
  8. isocalendar():返回包含年月日的元组。
  9. isoformat():返回格式化的字符串,与直接print出的字符串相同。
  10. strftime(fmt):返回指定格式的日期字符串,参数fmttime模块中的用法相同。
  11. ctime():与time.ctime()返回的字符串格式相同,但是它不能传入时间戳参数。

4.2.2 time类

实例化方法:time([hour[, minute[, second[, microsecond[, tzinfo]]]]])

常用属性和方法

  1. hour、minute、second、microsecond:分别表示时、分、秒、微秒。
  2. tzinfo:时区信息。
  3. replace([hour[, minute[, second[, microsecond[, tzinfo]]]]]):创建一个新的time对象,使用传入的参数代替原有对象的参数,返回一个替换后的对象,原有对象保持不变。
  4. isoformat():返回指定格式的时间字符串,默认返回的格式为HH:MM:SS,可以根据参数指定返回到哪一位,参数可选hours、minutes、seconds、milliseconds、microseconds,默认为auto
  5. strftime(fmt):可传入指定格式的时间字符串,参数fmttime模块中的用法相同。

4.2.3 datetime类

实例化方法:datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])

常用属性和方法

  1. datetime.today():返回当前本地时间的datetime对象。
  2. datetime.now():返回当前本地时间的datetime对象,如果提供了tz参数,则返回tz参数对应时区的本地时间。
  3. datetime.utcnow():返回一个当前UTC时间的datetime对象。
  4. datetime.fromtimestamp(timestamp[, tz]):根据时间戳创建一个datetime对象,参数tz指定时区信息。
  5. datetime.utcfromtimestamp(timestamp):根据时间戳创建一个datetime对象。
  6. datetime.combine(date, time):根据date对象和time对象创建一个datetime对象。
  7. datetime.strptime(date_string, format):将格式化字符串转换为datetime对象。
  8. date():获取datetime对象对应的date对象。
  9. time():获取datetime对象对应的time对象。
  10. 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)

主要的属性和方法

  1. timezone.utcoffset(dt):返回在构造timezone实例时指定的固定值。
  2. timezone.tzname(dt):返回在构造timezone实例时指定的固定值。
  3. timezone.dst(dt):返回None
  4. timezone.fromutc(dt):返回dt + offset
  5. timezone.utcUTC时区。

4.3 calendar模块

提供了一些与日历相关的功能。默认情况下,这些日历将星期一作为一周的第一天,将星期日作为一周的最后一天。

4.3.1 常用的属性和方法

  1. setfirstweekday(firstweekday):指定一周的第一天,其中0表示周星期一,1表示星期二,以此类推。
  2. firstweekday():返回一周的第一天,这里同样是0表示星期一。
  3. isleap(year):判断指定年份是否为闰年,是返回True,否则返回False
  4. weekday(year, month, day):获取指定日期为星期几。
  5. weekheader(n):返回包含星期的英文单词的缩写,其中n表示英文缩写所占的宽度。
  6. monthrange(year, month):返回指定月份第一天是星期几和指定月份一共有几天。
  7. monthcalendar(year, month):返回一个月中天数列表,按周划分为一个二维数组。
  8. prmonth(theyear, themonth, w=0, l=0):打印一个月的日历,theyear指定年份,themonth指定月份,w每个单元格宽度,默认0,最小宽度为2,l每列换l行,默认为0,至少换行1行
  9. month(theyear, themonth, w=0, l=0):返回一个月的日历的多行文本字符串,参数与上面函数参数含义相同。
  10. prcal(year, w=0, l=0, c=6, m=3):打印一年的日历,w每个单元格宽度,默认0,最小宽度为2,l每列换l行,默认为0,至少换行1行,c表示月与月之间的间隔宽度,默认为6,最小宽度为2,m表示将12个月分为m列。
  11. 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

如有错误欢迎批评指正!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值