Python模块百科_时间的访问和转换(time)_下

@TOC

一、概述

  time模块提供了各种与时间相关的函数。相关功能还可以参阅datetimecalendar模块。

  尽管所有平台皆可引用此模块,但模块内的函数并不是所有平台都可用。此模块中定义的大多数函数的实现都是调用其所在平台的C语言库的同名函数。因为这些函数的语义可能因平台而异,所以使用时最好查阅对应平台的相关文档。

二、术语

下面是一些名词术语的解释

2.1 UTC

协调世界时(Coordinated Universal Time)的缩写。它以前也被称为格林威治标准时间(GMT)。使用UTC而不是CUT作为缩写是英语与法语(Temps Universel Coordonné)之间妥协的结果,不是什么低级错误。

2.2 DST

夏令时(Daylight Saving Time)的缩写,在一年的某一段时间中将当地时间调整(通常)一小时。 夏令时的规则非常神奇(由当地法律确定),并且每年的起止时间都不同。C语言库中有一个表格,记录了各地的夏令时规则(实际上,为了灵活性,C语言库通常是从某个系统文件中读取这张表)。从这个角度而言,这张表是夏令时规则的唯一权威真理。

2.3 epoch

起始的时间点,即 time.gmtime(0) 的返回值。 这在所有平台上都是 1970-01-01, 00:00:00 (UTC)。

2.4 纪元秒数

指自 epoch (纪元)时间点以来经过的总秒数,通常不包括[闰秒。 在所有符合 POSIX 标准的平台上,闰秒都不会记录在总秒数中。

三、惯例

下面是一些惯例的说明

3.1 有限的过去,有限的未来

此模块中只能处理有限的时间区间,可能无法处理 epoch 之前或遥远未来的日期和时间。 “遥远未来”的分界点是由 C 库确定的;对于 32 位系统,它通常是在 2038 年。

3.2 两位数年份,68大69小

函数 strptime()在接收到 %y 格式代码时可以解析使用 2 位数表示的年份。当解析 2 位数年份时,函数会按照 POSIX 和 ISO C 标准进行年份转换:数值 69–99 被映射为 1969–1999;数值 0–68 被映射为 2000–2068。

3.3 Unix的老旧时钟

由于平台限制,各种实时函数的精度可能低于其值或参数所要求(或给定)的精度。例如,在大多数Unix系统上,时钟频率仅为每秒50或100次。

另一方面,time()sleep()的精度优于它们的 Unix 等价物:时间表示为浮点数,time() 返回可用的最准确时间,并且 sleep()将接受带有非零小数部分的时间。

3.4 时间转换关系

时间值由gmtime()localtime()strptime()返回,并被asctime()mktime()strftime()接受,是一个 9 个整数的序列。gmtime()localtime()strptime()的返回值还提供各个字段的属性名称。具体字段属性请看struct_time章节。

使用以下函数在时间表示之间进行转换:

使用
自纪元以来的秒数UTC 的 struct_timegmtime()
自纪元以来的秒数本地时间的 struct_timelocaltime()
UTC 的 struct_time自纪元以来的秒数calendar.timegm()
本地时间的 struct_time自纪元以来的秒数mktime()

四、函数

4.8 time.process_time()

(以小数表示的秒为单位)返回当前进程的系统和用户 CPU 时间的总计值。 它不包括睡眠状态所消耗的时间。 根据定义它只作用于进程范围。 返回值的参考点未被定义,因此只有两次调用之间的差值才是有效的。

# 记录开始时间点
start_time = time.process_time()
# 进行一些计算或操作
for i in range(1000000):pass
# 记录结束时间点
end_time = time.process_time()
# 计算执行时间
elapsed_time = end_time - start_time
print(f"执行时间:0.0561 秒")# 执行结果
执行时间:0.03125

4.9 time.sleep(secs)

调用方线程暂停执行给定的秒数。 该参数可以为浮点数以指定一个更精确的休眠时间。如果休眠被信号打断并且信号处理句柄未引发异常,休眠将基于重新计算的时延重新开始。暂停时间有可能比请求的要长出一段不确定的时间,因为会受系统中的其他活动排期影响。在 Windows 上,如果 secs 为零,线程会将其时间片的剩余部分让渡给任何其他准备要运行的线程。 如果没有准备要运行的其他线程,该函数将立即返回,而线程将继续执行。如果 secs 为零,则会使用 Sleep(0)

time.sleep(5)
print("5 秒已过")# 执行结果
5 秒已过

4.10 time.strftime(format[, t])

转换一个元组或struct_time 表示的由gmtime()localtime() 返回的时间到由 format 参数指定的字符串。如果未提供 t ,则使用由 localtime() 返回的当前时间。 format 必须是一个字符串。如果 t 中的任何字段超出允许范围,则引发ValueError

0是时间元组中任何位置的合法参数;如果它通常是非法的,则该值被强制改为正确的值。

以下指令可以嵌入 format 字符串中:

指令含意备注
%a本地化的缩写星期中每日的名称。
%A本地化的星期中每日的完整名称。
%b本地化的月缩写名称。
%B本地化的月完整名称。
%c本地化的适当日期和时间表示。
%d十进制数 [01,31] 表示的月中日。
%H十进制数 [00,23] 表示的小时(24小时制)。
%I十进制数 [01,12] 表示的小时(12小时制)。
%j十进制数 [001,366] 表示的年中日。
%m十进制数 [01,12] 表示的月。
%M十进制数 [00,59] 表示的分钟。
%p本地化的 AM 或 PM 。(1)
%S十进制数 [00,61] 表示的秒。(2)
%U十进制数 [00,53] 表示的一年中的周数(星期日作为一周的第一天)。 在第一个星期日之前的新年中的所有日子都被认为是在第 0 周。(3)
%w十进制数 [0(星期日),6] 表示的周中日。
%W十进制数 [00,53] 表示的一年中的周数(星期一作为一周的第一天)。 在第一个星期一之前的新年中的所有日子被认为是在第 0 周。(3)
%x本地化的适当日期表示。
%X本地化的适当时间表示。
%y十进制数 [00,99] 表示的没有世纪的年份。
%Y十进制数表示的带世纪的年份。
%z时区偏移以格式 +HHMM 或 -HHMM 形式的 UTC/GMT 的正或负时差指示,其中H表示十进制小时数字,M表示小数分钟数字 [-23:59, +23:59] 。
%Z时区名称(如果不存在时区,则不包含字符)。已弃用。
%%字面的 '%' 字符。

注释:

  1. 当与strptime函数一起使用时,如果使用 %I 指令来解析小时, %p 指令只影响输出小时字段。

  2. 范围真的是 061 ;值 60 在表示leap seconds的时间戳中有效,并且由于历史原因支持值 61

  3. 当与strptime函数一起使用时, %U%W 仅用于指定星期几和年份的计算。

    # 获取当前时间
    current_time = time.time()
    # 使用 strftime 格式化时间一
    formatted_time = time.strftime("%H:%M:%S", time.localtime(current_time))
    print("当前时间(格式化时间一):", formatted_time)
    # 使用 strftime 格式化时间二
    formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(current_time))
    print("当前时间(格式化时间二):", formatted_time)
    # 使用 strftime 格式化短日期
    formatted_date = time.strftime("%d/%m/%Y", time.localtime(current_time))
    print("当前时间(格式化短日期):", formatted_time)
    # 使用 strftime 格式化长日期
    formatted_date = time.strftime("%A, %d %B %Y", time.localtime(current_time))
    print("当前时间(格式化长日期):", formatted_time)
    # 使用 strftime 格式化完整日期和时间
    formatted_datetime = time.strftime("%A, %d %B %Y, %H:%M:%S", time.localtime(current_time))
    print("当前时间(格式化完整日期和时间):", formatted_time)# 执行结果
    当前时间(格式化时间一): 12:16:42
    当前时间(格式化时间二): 2024-02-24 12:16:42
    当前时间(格式化短日期): 2024-02-24 12:16:42
    当前时间(格式化长日期): 2024-02-24 12:16:42
    当前时间(格式化完整日期和时间): 2024-02-24 12:16:42
    

4.11 time.strptime(string[, format])

根据格式解析表示时间的字符串。 返回值为一个被gmtime()localtime() 返回的struct_time

format 参数使用与strftime()相同的指令。 它默认为匹配ctime()所返回的格式 "%a %b %d %H:%M:%S %Y" 。 如果 string 不能根据 format 来解析,或者解析后它有多余的数据,则会引发ValueError。 当无法推断出更准确的值时,用于填充任何缺失数据的默认值是 (1900, 1, 1, 0, 0, 0, 0, 1, -1)stringformat 都必须为字符串。

# 格式化字符串,用于表示日期和时间
date_format = "%Y-%m-%d %H:%M:%S"
# 要解析的日期和时间字符串
date_string = "2023-09-25 14:30:45"
# 使用 strptime 解析日期和时间字符串
parsed_time = time.strptime(date_string, date_format)
# 输出解析后的时间元组
print("解析后的时间元组:", parsed_time)# 执行结果
解析后的时间元组: time.struct_time(tm_year=2023, tm_mon=9, tm_mday=25, tm_hour=14, tm_min=30, tm_sec=45, tm_wday=0, tm_yday=268, tm_is夏令时=-1)

4.12 class time.struct_time

返回的时间值序列的类型为gmtime()localtime() 和strptime。它是一个带有named tuple 接口的对象:可以通过索引和属性名访问值。 存在以下值:

索引属性
0tm_year(例如,1993)
1tm_monrange [1, 12]
2tm_dayrange [1, 31]
3tm_hourrange [0, 23]
4tm_minrange [0, 59]
5tm_secrange [0, 61];参见strftime()中的 注释 (2)
6tm_wday取值范围 [0, 6];周一为 0
7tm_ydayrange [1, 366]
8tm_is夏令时0, 1 或 -1;如下所示
N/Atm_zone时区名称的缩写
N/Atm_gmtoff以秒为单位的UTC以东偏离

请注意,与C结构不同,月份值是 [1,12] 的范围,而不是 [0,11] 。

在调用 mktime()时,tm_is夏令时可以在夏令时生效时设置为1,而在夏令时不生效时设置为0。 值-1表示这是未知的,并且通常会导致填写正确的状态。

当一个长度不正确的元组被传递给期望struct_time 的函数,或者具有错误类型的元素时,会引发TypeError

# 获取当前时间
current_time = time.localtime()
# 输出当前时间的 struct_time 对象
print("当前时间的 struct_time 对象:", current_time)
# 访问 struct_time 对象的各个元素
print("年:", current_time.tm_year)
print("月:", current_time.tm_mon)
print("日:", current_time.tm_mday)
print("小时:", current_time.tm_hour)
print("分钟:", current_time.tm_min)
print("秒:", current_time.tm_sec)
print("一周中的第几天(0 表示星期一):", current_time.tm_wday)
print("一年中的第几天:", current_time.tm_yday)
print("是否是夏令时:", current_time.tm_is夏令时)# 执行结果
当前时间的 struct_time 对象: time.struct_time(tm_year=2024, tm_mon=2, tm_mday=24, tm_hour=12, tm_min=27, tm_sec=18, tm_wday=5, tm_yday=55, tm_is夏令时=0)
年: 2024
月: 2
日: 24
小时: 12
分钟: 27
秒: 18
一周中的第几天(0 表示星期一): 5
一年中的第几天: 55
是否是夏令时: 0

4.13 time.time()

返回以浮点数表示的从epoch 开始的秒数形式的时间。 对leap seconds的处理取决于具体平台。 在 Windows 和大多数 Unix 系统中,闰秒不会被计入从epoch 开始的秒数形式的时间中。 这通常被称为 Unix 时间

请注意,即使时间总是作为浮点数返回,但并非所有系统都提供高于1秒的精度。虽然此函数通常返回非递减值,但如果在两次调用之间设置了系统时钟,则它可以返回比先前调用更低的值。

# 获取当前时间戳(自1970年1月1日以来的秒数)
current_timestamp = time.time()
# 输出当前时间戳
print("当前时间戳:", current_timestamp)
# 将当前时间戳转换为日期和时间字符串
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(current_timestamp))
# 输出格式化后的日期和时间字符串
print("格式化后的日期和时间字符串:", formatted_time)# 执行结果
当前时间戳: 1708749105.776935
格式化后的日期和时间字符串: 2024-02-24 12:31:45

五、时区常量

5.1 time.altzone

本地夏令时时区的偏移量,以UTC为单位的秒数,如果已定义。如果当地夏令时时区在UTC以东(如在西欧,包括英国),则是负数。 只有当 daylight 非零时才使用它。

# 获取当前时间戳(自1970年1月1日以来的秒数)
current_timestamp = time.time()
print("当前时间戳:", current_timestamp)
# 获取当前时区偏移量(以秒为单位)
timezone_offset = time.altzone
print("当前时区偏移量(以秒为单位):", timezone_offset)
# 获取当前时区偏移量(以小时为单位)
timezone_offset_hours = timezone_offset / 3600
print("当前时区偏移量(以小时为单位):", timezone_offset_hours)# 执行结果
当前时间戳: 1708749985.8680549
当前时区偏移量(以秒为单位): -32400
当前时区偏移量(以小时为单位): -9.0

5.2 time.daylight

如果启用了夏令时,则为非零。

# 获取当前是否启用了夏令时
is_夏令时_enabled = time.daylight
print("当前是否启用了夏令时:", is_夏令时_enabled)# 执行结果
当前是否启用了夏令时: 0

5.3 time.timezone

本地(非夏令时)时区的偏移量,UTC以西的秒数(西欧大部分地区为负,美国为正,英国为零)。

# 获取当前时区偏移量(以分钟为单位)
timezone_offset_minutes = time.timezone
print("当前时区偏移量(以分钟为单位):", timezone_offset_minutes)
# 获取当前时区偏移量(以小时为单位)
timezone_offset_hours = timezone_offset_minutes / 60
print("当前时区偏移量(以小时为单位):", timezone_offset_hours)# 执行结果
当前时区偏移量(以分钟为单位): -28800
当前时区偏移量(以小时为单位): -480.0

5.4 time.tzname

两个字符串的元组:第一个是本地非夏令时时区的名称,第二个是本地夏令时时区的名称。 如果未定义夏令时时区,则不应使用第二个字符串。

# 获取当前时区的名称
tzname = time.tzname
print("当前时区名称:", tzname)
tzname1, tzname2 = tzname[0].encode('latin-1').decode('gbk'), tzname[1].encode('latin-1').decode('gbk')
print('当前时区名称:({},{})'.format(tzname1, tzname2))# 执行结果
当前时区名称: ('Öйú±ê׼ʱ¼ä', 'ÖйúÏÄÁîʱ')
当前时区名称:(中国标准时间,中国夏令时)

六、相关模块

6.1 模块 datetime

更多面向对象的日期和时间接口,以及多种处理日期和时间的类

6.2 模块locale

国际化服务模块。 区域的设置会影响strftime()strptime中许多格式说明符的解析。

模块calendar

一般日历相关功能模块。这个模块的 timegm() 是函数gmtime()的反函数。


may the odds be ever in your favor ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/700197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust之构建命令行程序(四):用TDD(测试-驱动-开发)模式来开发库的功能

开发环境 Windows 11Rust 1.75.0 VS Code 1.86.2 项目工程 这次创建了新的工程minigrep. 用测试-驱动模式来开发库的功能 既然我们已经将逻辑提取到src/lib.rs中,并将参数收集和错误处理留在src/main.rs中,那么为代码的核心功能编写测试就容易多了。我…

C#浮点运算出错问题

在计算单价等活动的时候,我们经常会用到double 浮点进行运算,但是在乘除的时候经常出现精度丢失问题 decimal 关键字表示 128 位数据类型。 同浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算 dou…

【MATLAB源码-第146期】基于matlab的信源编码仿真GUI,对比霍夫曼编码,算术编码和LZ编码。

操作环境: MATLAB 2022a 1、算法描述 霍夫曼编码、算术编码和LZ编码是三种广泛应用于数据压缩领域的编码技术。它们各自拥有独特的设计哲学、实现方式和适用场景,因此在压缩效率、编解码速度和内存使用等方面表现出不同的特点。接下来详细描述这三种编…

【大厂AI课学习笔记】【2.2机器学习开发任务实例】(7)特征构造

特征分析之后,就是特征构造。 特征构造第一步 特征构造往往要进行数据的归一化。 在本案例中,我们将所有的数据,将所有特征区间调整为0~1之间。 如上图。 那么,为什么要进行归一化,又如何将数据,调整为…

信号处理与 signal.h 库

C 语言中的 signal.h 头文件提供了一种处理程序执行期间报告的不同信号的机制。它定义了一些变量类型、宏和函数,让程序能够更灵活地响应来自操作系统或其他进程的信号。 sig_atomic_t 类型 sig_atomic_t 类型是一种在信号处理程序中使用的整数类型。它保证在信号…

QtCreator“设计”按钮灰色无法点击,如何解决

Mac中安装QML Designer插件: 首选项-> 关于插件 -> 勾选QT Quick下的QML Designer 点击确定安装插件,重启Qt Creator后生效

【Langchain多Agent实践】一个有推销功能的旅游聊天机器人

【LangchainStreamlit】旅游聊天机器人_langchain streamlit-CSDN博客 视频讲解地址:【Langchain Agent】带推销功能的旅游聊天机器人_哔哩哔哩_bilibili 体验地址: http://101.33.225.241:8503/ github地址:GitHub - jerry1900/langcha…

C++惯用法之CRTP(奇异递归模板模式)

相关系列文章 C惯用法之Pimpl C之数据转换(全) 目录 1.介绍 2.CRTP的使用场景 2.1.实现静态多态 2.2.代码复用和扩展性 3.总结 1.介绍 CRTP的全称是Curiously Recurring Template Pattern,即奇异递归模板模式,简称CRTP。CRTP是一种特殊的模板技术和…

【达梦数据库】数据库的方言问题导致的启动失败

问题场景 在项目中采用了hibernate ,连接数据库原本为ORACLE,后续打算改造为国产数据库 达梦 链接配置: # 达梦写法, index:driver-class-name: dm.jdbc.driver.DmDriverjdbc-url: jdbc:dm://192.168.220.225:5236/IDX4username:…

Windows 路径长度限制

Windows API 中的路径长度限制是 260 个字符,但实际可用长度会因为几个因素而减少。以下是减少可用字符数的因素: 驱动器标识符:路径通常包括驱动器的标识符(如 C:\),这占用了3个字符。 8.3 文件名保留&am…

【QT 5 +Linux下软件生成+qt软件生成使用工具+学习他人文章+第一篇:使用linuxdeployqt软件生成】

【QT 5 Linux下软件生成qt软件生成使用工具学习他人文章第一篇:使用linuxdeployqt软件生成】 1、前言2、实验环境3、自我学习总结-本篇总结1、新手的疑问,做这件事的目的2、了解工具:linuxdeployqt工具3、解决相关使用过程中问题 4、参照文章…

新手想要做好抖音小店,在开店前你需要知道这五点注意事项!

大家好,我是电商小布。 开抖店你说难吗,其实也不难,把需要的材料准备好就可以着手开店。 难的呢,是在小店的运营上边。 所以新手开店想要少出错,少踩坑,一定要提前把店铺的相关注意事项搞清楚。 今天&a…

将yolov8权重文件转为onnx格式并在c#中使用

yolo模型转ONNX 在yolov8中,我们将训练结果的.pt权重文件转换为onnx格式只需要使用ultralytics库中的YOLO类,使用pip安装ultralytics库,然后执行下面python代码 from ultralytics import YOLO# 加载YOLOv8模型 model YOLO("best.pt&q…

锁类型介绍

锁类型详解 在 《Mutex 详解》一文中我们主要介绍了 C11 标准中的互斥量(Mutex),并简单介绍了一下两种锁类型。本节将详细介绍一下 C11 标准的的锁类型。 C11 标准为我们提供了两种基本的锁类型,分别如下: std::lock_guard,与 …

力扣代码学习日记六

Problem: 66. 加一 思路 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输…

Selenium浏览器自动化测试框架详解

selenium简介 介绍 Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google C…

抖店没有流量怎么办?如何提高店铺流量?醒醒团队经验分享!

我是电商珠珠 醒醒团队这个IP已经做了五年多的时间了,团队成员从原来的几个人到现在的70。我们从20年开始入驻抖店,到现在也已经三年多了。期间也会带着学员一起做店,大多数学员的问题就是店开了,但是一直没有流量,没…

深度学习中数据的转换

原始(文本、音频、图像、视频、传感器等)数据被转化成结构化且适合机器学习算法或深度学习模型使用的格式。 原始数据转化为结构化且适合机器学习和深度学习模型使用的格式,通常需要经历以下类型的预处理和转换: 文本数据&#xf…

台式电脑电源功率越大越费电吗?装机选购多少W电源

要组装一台电脑,我们首先需要选择硬件。 硬件搭配最关键的一点就是CPU和主板的兼容性。 硬件、电源等之间的平衡都需要仔细考虑。 那么台式电脑电源多大功率合适呢? 下面分享组装电脑电源瓦数选购指南,教您正确选择合适的电源瓦数。 让我们来…

docker install private registry 【docker 安装 registry 仅证书认证】

预备条件: 安装docker 我们设定镜像仓库域名为registry01.dev.com 配置/etc/hosts 192.168.23.51 registry01.dev.com安装 registry #!/bin/bashreg_ip$1 reg_n$2 reg_port$3if [ $# -eq 0 ]; thenecho "Usage: $0 [reg_ip] [registry_name]"echo &q…