Python学习笔记——CSDN学习记录二十八:时间模块与日历模块

时间模块与日历模块

        在 Python 中是没有原生数据类型支持时间的,日期与时间的操作需要借助是三个模块,分别是 time、datetime、calendar。

      

一、介绍:

        1. time 模块可以操作 C 语言库中的时间相关函数,时钟时间与处理器运行时间都可以获取。

        2. datetime 模块提供了日期与时间的高级接口。

        3. calendar 模块为通用日历相关函数,用于创建数周、数月、数年的周期性事件。

二、补充信息:

        1. epoch(纪元):时间开始的点,其值取决于平台。如:

import time

print(time.gmtime(0))


# 输出结果:
#   
#       time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)

        2. 纪元秒数:是指 epoch 时间点以来经历过的总秒数,通常不包括闰秒。在所有符合 POSIX 标准的平台上,闰秒都不会记录在总秒数中。通常,将纪元秒数称为时间数。

三、get_clock_info 函数:该函数获取时钟的基本信息,得到的值因不同系统而存在差异。

        1. 语法格式:

                time.get_clock_info(name)

        2. name 取值:

                (1) monotonic:time.monotonic()

                (2) perf_counter:time.perf_counter()

                (3) process_time:time.process_time()

                (4) thread_time:time.thread_time()

                (5) time:time.time()

        3. 该函数返回值的属性:

                (1) adjustable:如果时钟可以自动更改(例如通过 NTP 守护程序)或由系统管理员手动更改,则为 True,否则为 False。

                (2) implementation:用于获取时钟值的基础 C 函数名称,即调用底层 C 的函数。

                (3) monotonic:如果时钟不能倒退则为 True,否则为 False。

                (4) resolution:以秒为单位的时钟分辨率(float)。

四、获取时间戳 time.time() 函数:

        在 Python 中通过 time.time() 函数获取纪元秒数,可以把从 epoch 开始之后的秒数以浮点数格式返回:

import time

print(time.time())


# 输出结果:
#   
#       1675911916.7722962

五、获取可读时间 time.ctime() 函数:

        1. 时间戳主要用于时间上的方便计算,比较难理解,若希望获得可读时间,使用 ctime() 函数。如:

import time

print(time.ctime())


# 输出结果:
#   
#       Thu Feb  9 11:09:27 2023

        2. 直接将时间戳转换为可读时间,使用 localtime 函数。如:

import time

localtime = time.localtime(time.time())

print("本地时间为 :", localtime)


# 输出结果:
#   
#       本地时间为 : time.struct_time(tm_year=2023, tm_mon=2, tm_mday=9, tm_hour=11, tm_min=55, tm_sec=3, tm_wday=3, tm_yday=40, tm_isdst=0)

                · 时间戳最小为 0,最大值由 Python 的环境和操作系统决定。

六、单调时间 time.monotonic() 函数:

        从系统启动开始计时,一般从 0 开始单调递增。操作系统的时间也可能不是从 0 开始,而且会因为时间出错而回调。如:

import time

print("单调时间:",time.monotonic())


# 输出结果:
#   
#       单调时间: 53431.453

七、处理器时钟时间 time.clock() 函数:

        1. time() 函数返回的是纪元秒数(时间戳),clock() 函数返回的是处理器时钟时间。

        2. clock() 函数的返回值:

                (1) 第一次调用时,返回的是程序运行的实际时间。

                (2) 第二次及之后的调用,返回的是自第一次调用后到这次调用的时间间隔。

                · Python3.8 已移除 clock() 函数,用time.perf_counter() 或 time.process_time() 方法代替。

八、性能计数器 time.perf_counter() 函数:

        该函数的 epoch 是未定义的,一般使用该函数是为了比较和计算,不是为了用作绝对时间。该时钟用于测量较短持续时间的具有最高有效精度的时钟,包括睡眠状态消耗的时间,调用两次才会有效。如:

import time

t0 = time.perf_counter()

for i in range(100000):
    pass

print("程序运行时间: ", time.perf_counter() - t0)


# 输出结果:
#   
#       程序运行时间:  0.050107000000000124

        · 与其类似的函数还有 perf_counter_ns()、process_time()、process_time_ns()。

九、时间组件:

        1. gmtime():返回 UTC 中的当前时间。

        2. localtime():返回当前时区对应的时间。

        3. mktime():接收 struct_time 类型数据并将其转换成浮点型数值,即时间戳。

十、解析和格式化时间:

        strptime() 和 strftime() 函数可以使时间值在 struct_time 表示和字符串表示之间互相转换。如:

import time

x = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(x)

struct_time = time.strptime(x, "%Y-%m-%d %H:%M:%S")
print(struct_time)


# 输出结果:
#   
#       2023-02-09 22:28:49
#       time.struct_time(tm_year=2023, tm_mon=2, tm_mday=9, tm_hour=22, tm_min=28, tm_sec=49, tm_wday=3, tm_yday=40, tm_isdst=-1)

        · tm_sec 秒数,取值 0-61;tm_wday 星期,取值 0-6,其中零表示星期日;tm_isdst 在夏令时生效时为 1,不生效时为 0,-1 表示未知。

        · 官方参数:

十一、datetime 模块:

                在 datetime 模块中,Python 提供了五个主要的对象类:

                        datetime:允许同时操作时间和日期;

                        date:只操作日期;

                        time:只操作时间;

                        timedelta:用于操作日期以及测量时间跨度;

                        tzinfo:处理时区。

        1. datetime 类:是 date 类与 time 类的结合体。

                (1) 获取当前的日期与时间:

from datetime import datetime

dt = datetime.now()

print(dt)


# 输出结果:
#   
#       2023-02-09 22:40:40.947211

                (2) 获取时间戳: 

from datetime import datetime

dt = datetime.now()

stamp = datetime.timestamp(dt)


print(stamp)
# 输出结果:
#   
#       1675953750.07976

        2. date 类:

                (1) 类的属性和方法:

                        · min、max:date 对象能表示的最小、最大日期。

                        · resolution:date 对象表示日期的最小单位,返回“天”。

                        · today():返回表示当前本地日期的 date 对象。

                        · fromtimestamp(timestamp):根据时间戳,返回一个 date 对象。

import time
from datetime import date

print('date.min:', date.min)

print('date.max:', date.max)

print('date.resolution:', date.resolution)

print('date.today():', date.today())

print('date.fromtimestamp():', date.fromtimestamp(time.time()))


# 输出结果:
#   
#       date.min: 0001-01-01
#       date.max: 9999-12-31
#       date.resolution: 1 day, 0:00:00
#       date.today(): 2023-02-09
#       date.fromtimestamp(): 2023-02-09

                 (2) 对象的属性和方法:

                        创建一个 date 对象:

from datetime import date

d = date(year=2021,month=3,day=9)

print(d)


# 输出结果:
#   
#       2021-03-09

                        · d.year:返回“年”;

                        · d.month:返回“月”;

                        · d.day:返回“日”;

                        · d.weekday():返回“星期”,如果是星期一则返回 0,如果是星期二则返回 1,以此类推;

                        · d.isoweekday():返回“星期”,如果是星期一则返回 1,如果是星期二则返回 2,以此类推;

                        · d.isocalendar():返回格式如 (year, month, day);

                        · d.isoformat():返回格式如 “YYYY-MM-DD” 的字符串格式;

                        · d.strftime(fmt):自定义格式化字符串,与 time 模块中的strftime 类似。

        3. time 类:

                (1) 类的属性:

                        · min、max:time 类所能表示的最小、最大时间。

                                其中,time.min = time(0, 0, 0, 0),time.max = time(23, 59, 59, 999999)。

                        · resolution:时间的最小单位,此处为 1 微妙。

from datetime import time

print('time.min:', time.min)

print('time.max:', time.max)

print('time.resolution:', time.resolution)


# 输出结果:
#   
#       time.min: 00:00:00
#       time.max: 23:59:59.999999
#       time.resolution: 0:00:00.000001

                (2) 对象的属性和方法:

                        创建一个 time 对象:

from datetime import time

t = time(hour=20, minute=20, second=40)

print(t)


# 输出结果:
#   
#       20:20:40

                        · t.hour、t.minute、t.second、t.microsecond:时、分、秒、微秒;

                        · t.tzinfo:时区信息;

                        · t.isoformat():返回型如“HH:MM:SS”格式的字符串表示时间;

                        · t.strftime(fmt):返回自定义格式化字符串。

        4. timedelta 类:

                通过 timedelta() 函数返回一个 timedelta 时间间隔对象,该函数无必填参数,若写入一个参数则表示间隔多少天。如:

from datetime import timedelta

print(timedelta(10))        # 间隔 10 天

print(timedelta(weeks=1))   # 跨度为1 周


# 输出结果:
#   
#       10 days, 0:00:00
#       7 days, 0:00:00

                · 两个时间间隔对象可以彼此之间相加减,返回的仍是一个时间间隔对象。

                · 一个 datetime 对象减去一个时间间隔对象,返回的是一个 datetime 对象。

                · 两个 datetime 对象相减,返回的是一个时间间隔对象。

十二、calendar 模块:

        calendar 模块定义了 Calendar 类,该类封装了值的计算,例如给定月份或年份中周的日期。通过 TextCalendar 和 HTMLCalendar 类可以生成预格式化的输出。

        如:默认从周日开始:

import calendar

c = calendar.TextCalendar(calendar.SUNDAY)
c.prmonth(2021, 3)


# 输出结果:
#   
#            March 2021
#       Su Mo Tu We Th Fr Sa
#           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
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HaJucy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值