【Python】time模块和datetime模块的部分函数说明

时间戳与日期

在说到这俩模块之前,首先先明确几个概念:

  1. 时间戳是个很单纯的东西,没有“时区”一说,因为时间戳本质上是经过的时间
  2. 日常生活中接触到的“日期”、“某点某时某分”准确的说是时间点,都是有时区概念的。
    在日常生活中如果说现在几点但不说明时区的话就都视为本地时区,这在datetime中也一样,不额外附上时区信息的话都视为本地时区。



time模块和datetime模块

在time模块中比较常用的函数有time.timetime.gmtimetime.localtimetime.mktime,其中time.gmtime的“gm”代表的含义是“Greenwich Mean Time(格林尼治平均时间)”,也就是该函数会返回英国时间,也可以理解为UTC-0。我们处在东八区,为UTC+8,如果使用time.gmtime的话获取到的时间往往会少8小时,要改用time.localtime才能获取到正确的时间。

而datetime模块比time模块要稍微复杂那么一些,用文字也不好表达,之后用图表的方式进行叙述。datetime更加复杂的一大原因是time模块是 面向函数,而datetime模块是 面向对象。具体来说就是:

  • time.struct_time这个类里头没有什么函数可以调用,就像是C语言里的结构体那样仅存放信息,虽然可以携带“时区”信息但许多模块对其进行处理时会将其中的时区信息无视掉(所以经常出现转换的时间与预期不符的问题);
  • datetime.datetime则不一样,这个类里头有不少的函数/方法,而方法与类对象是强耦合关系,类对象中有无时区信息都会对方法的执行结果造成显著影响。在官方文档中有明确提及datetime.datetime对象有“naive(简单型)”和“aware(感知型)”这两种类型,虽然看上去很复杂但实际上也就“有无携带时区信息”的差别罢了:有“时区信息”的就是aware(感知型),没有的则是naive(简单型)。可通过获取datetime.datetime对象tzinfo属性来判断其是否带有时区信息。
  • 一般情况下datetime.datetime对象往往是naive(简单型),也就是在你不经意的时候你以为它是“UTC”但实际上是“LMT”,例如通过datetime.datetime.utcnow获得的datetime对象竟然是不带时区的,如果不查官方文档的话甚至还以为它会带着时区信息的,而官方文档也强调了这一点:[datetime.utcnow]datetime.utcnow()返回的当前 UTC 日期和时间是一个 本机 datetime 对象,哈哈哈哈哈直接气炸了好吧。(所谓的“本机”也就是本地的意思,说直白点就是datetime.datetime.utcnow返回的是个naive-datetime对象);
  • 补充说明,“函数(function)”和“方法(method)”有着轻微差别,具体点就是“首参有无绑定特定对象”的区别。这里不展开说明避免跑题,感兴趣的可以自己了解下。简单使用下@staticmethod@classmethod将更直观地看出函数(function)方法(method)的差异。



图表说明:

以下为个人总结的图片表格:

请添加图片描述

补充:

  1. 上面说过,datetime.datetime类对象可分为“naive(简单型)”和“aware(感知型)”这两种东西,也就是一个没时区信息(默认本地时区),一个有时区信息。
    简单型datetime的tzinfo(时区信息)为None,而感知型的为datetime.timezone对象。
    在有关创建datetime对象的函数中,如果没有指定时区,返回的datetime对象将全是“简单型”(如有特例请指正)。
  2. 有两种生成时区对象datetime.timezone的方法:
    datetime.timezone(datetime.timedelta(hours=8,minutes=30))
    pytz.timezone('Asia/Shanghai')
    其中关于pytz.timezone的可支持时区(即传入的参数)可通过pytz.all_timezones这个列表进行查询。pytz为系统自带模块。
  3. 以下是能够生成aware-datetime对象的函数:
    datetime.datetime.now
    datetime.datetime.fromtimestamp
    datetime.datetime.replace
    datetime.datetime.astimezone
    datetime.datetime.strftime
  4. 通常使用datetime.datetime.replace进行naive-datetimeaware-datetime的相互转换,例如datetime.datetime.utcnow返回的是不带时区信息的naive-datetime对象,需要调用datetime.datetime.replace来转化为aware-datetime对象便于后期处理。

虽然才想起来需要补充代码,但想想还是算了(编写样例代码好麻烦的说实话),而且本博文的性质更偏向于“文档说明”而不是“应用举例”。关于time模块和datetime模块的具体用法需自行搜索以及测试。

顺带一提,如果出现运行结果与本文描述的不一致,可能是python版本的差异造成的,此时需要参考官方文档。我的Python版本为3.7.8,(当前Python都已经出到3.11了



参考资料:

  • time模块:(官方文档)https://docs.python.org/zh-cn/3.7/library/time.html
  • datetime模块:(官方文档)https://docs.python.org/zh-cn/3.7/library/datetime.html
  • 通过pytz获取指定时区:(博客园)https://www.cnblogs.com/meitian/p/12839164.html
  • 通过datetime.timezone获取简单时区(简单时区不包含夏令时):(官方文档)https://docs.python.org/zh-cn/3.7/library/datetime.html#timezone-objects
  • Python3中datetime不同时区转换介绍与踩坑:(博客园)https://www.cnblogs.com/AcAc-t/p/python3_datetime_timezone.html

未经本人同意不得擅自转载,本博文发布于CSDN:(CSDN)https://blog.csdn.net/weixin_44733774/article/details/133475034

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

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

相关文章

C#,数值计算——Ranq1的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Recommended generator for everyday use.The period is 1.8E19. Calling /// conventions same as Ran, above. /// </summary> public class Ranq1 { …

2023版 STM32实战4 滴答定时器精准延时

SysTick简介与特性 -1- SysTick属于系统时钟。 -2- SysTick定时器被捆绑在NVIC中。 -3- SysTick可以产生中断,且中断不可屏蔽。 SysTick的时钟源查看 通过时钟树可以看出滴答的时钟最大为72MHZ/89MHZ 通过中文参考手册也可以得到这个结论 代码编写&#xff08;已经验证&a…

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石②

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石② 第十九章 驱动程序基石②19.3 异步通知19.3.1 适用场景19.3.2 使用流程19.3.3 驱动编程19.3.4 应用编程19.3.5 现场编程19.3.6 上机编程19.3.7 异步通知机制内核代码详解 19.4 阻塞与非阻塞19.4.1 应用编程19.4.2 驱动编程…

【算法分析与设计】回溯法(上)

目录 一、学习要点1.1 回溯法1.2 问题的解空间1.3 0-1背包问题的解空间1.4 旅行售货员问题的解空间1.5 生成问题状态的基本方法 二、回溯法的基本思想三、回溯算法的适用条件四、递归回溯五、迭代回溯六、子集树与排列树七、装载问题八、批处理作业调度问题 一、学习要点 理解回…

【数据结构与算法】通过双向链表和HashMap实现LRU缓存 详解

这个双向链表采用的是有伪头节点和伪尾节点的 与上一篇文章中单链表的实现不同&#xff0c;区别于在实例化这个链表时就初始化了的伪头节点和伪尾节点&#xff0c;并相互指向&#xff0c;在第一次添加节点时&#xff0c;不需要再考虑空指针指向问题了。 /*** 通过链表与HashMa…

92、Redis ------- 使用 Lettuce 操作 Redis 的方法和步骤----(文字讲解无代码)

lettuce &#xff1a;英语的意思&#xff1a;生菜 是一个用来操作redis的框架&#xff0c;springboot内置默认支持的也是 lettuce &#xff0c;也可以自己改成 jedis Jedis 也是一个用来操作redis的框架 ★ Lettuce的核心API RedisURI&#xff1a;用于封装Redis服务器的URI信息…

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石⑤

嵌入式Linux应用开发-基础知识-第十九章驱动程序基石⑤ 第十九章 驱动程序基石⑤19.9 mmap19.9.1 内存映射现象与数据结构19.9.2 ARM架构内存映射简介19.9.2.1 一级页表映射过程19.9.2.2 二级页表映射过程 19.9.3 怎么给APP新建一块内存映射19.9.3.1 mmap调用过程19.9.3.2 cach…

数据结构:简单记录顺序表、链表、栈、队列

初学者很容易认为顺序表、链表、栈、队列是四种并列的数据结构&#xff0c;其实仔细想想并不是。 注意区分&#xff1a; 顺序表和链表是指数据的存储结构&#xff0c;是线性表的一种&#xff0c;顺序表一般指的就是数组&#xff0c;数据存储的逻辑顺序和物理顺序都是连续的&a…

nodejs+vue交通违章查询及缴费elementui

第三章 系统分析 10 3.1需求分析 10 3.2可行性分析 10 3.2.1技术可行性&#xff1a;技术背景 10 3.2.2经济可行性 11 3.2.3操作可行性&#xff1a; 11 3.3性能分析 11 3.4系统操作流程 12 3.4.1管理员登录流程 12 3.4.2信息添加流程 12 3.4.3信息删除流程 13 第四章 系统设计与…

Django模板加载与响应

前言 Django 的模板系统将 Python 代码与 HTML 代码解耦&#xff0c;动态地生成 HTML 页面。Django 项目可以配置一个或多个模板引擎&#xff0c;但是通常使用 Django 的模板系统时&#xff0c;应该首先考虑其内置的后端 DTL&#xff08;Django Template Language&#xff0c;D…

Git使用【下】

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 目录 &#x1f449;&#x1f3fb;标签管理理解标签标签运用 …

Grander因果检验(格兰杰)原理+操作+解释

笔记来源&#xff1a; 1.【传送门】 2.【传送门】 前沿原理介绍 Grander因果检验是一种分析时间序列数据因果关系的方法。 基本思想在于&#xff0c;在控制Y的滞后项 (过去值) 的情况下&#xff0c;如果X的滞后项仍然有助于解释Y的当期值的变动&#xff0c;则认为 X对 Y产生…

插入排序与希尔排序

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 前言&#xff1a; 这两个排序在思路上有些相似&#xff0c;所以有人觉得插入排序和希尔排序差别不大&#xff0c;事实上&#xff0c;他们之间的差别不小&#xff0c;插入排序只是希尔排序的最后一步。 目录 前言&#xff1a;…

华为数通方向HCIP-DataCom H12-831题库(单选题:161-180)

第161题 某台路由器Router LSA如图所示,下列说法中错误的是? A、本路由器已建立邻接关系 B、本路由器为DR C、本路由支持外部路由引入 D、本路由器的Router ID为10.0.12.1 答案: B 解析: 一类LSA的在transnet网络中link id值为DR的route id ,但Link id的地址不是10.0.12.…

对pyside6中的textedit进行自定义,实现按回车可以触发事件。

以下方法不算最优解。因为这个ui文件很容易重新编译&#xff0c;使写在ui.py里面的代码被删掉。 所以更好的方法应该是在主代码当中单独定义控件。并且使用布局添加控件到界面中。 以下内容纯为旧版实现&#xff0c;仅供参考&#xff1a; 我的实现方法是&#xff0c;先用qt de…

学信息系统项目管理师第4版系列15_资源管理基础

1. 项目资源 1.1. 实物资源 1.1.1. 着眼于以有效和高效的方式&#xff0c;分配和使用完成项目所需的实物资源 1.1.2. 包括设备、材料、设施和基础设施 1.2. 团队资源 1.2.1. 人力资源 1.2.2. 包含了技能和能力要求 2. 人力资源管理 2.1. 不仅是组织中最重要的资源之一&…

设计模式之抽象工厂模式--创建一系列相关对象的艺术(简单工厂、工厂方法、到抽象工厂的进化过程,类图NS图)

目录 概述概念适用场景结构类图 衍化过程业务需求基本的数据访问程序工厂方法实现数据访问程序抽象工厂实现数据访问程序简单工厂改进抽象工厂使用反射抽象工厂反射配置文件衍化过程总结 常见问题总结 概述 概念 抽象工厂模式是一种创建型设计模式&#xff0c;它提供了一种将相…

【开发篇】十、Spring缓存:手机验证码的生成与校验

文章目录 1、缓存2、用HashMap模拟自定义缓存3、SpringBoot提供缓存的使用4、手机验证码案例完善 1、缓存 缓存是一种介于数据永久存储介质与数据应用之间的数据临时存储介质使用缓存可以有效的减少低速数据读取过程的次数&#xff08;例如磁盘IO&#xff09;&#xff0c;提高…

Shapiro-Francia正态检验

Shapiro-Francia检验是一种用于检验数据是否来自正态分布的统计方法。它是Shapiro-Wilk检验的一个变种&#xff0c;通常适用于小到中等样本大小的数据集。Shapiro-Francia检验的核心思想是通过计算统计量来评估数据的正态性。 Shapiro-Francia检验的零假设是数据来自正态分布&…

26 docker前后端部署

[参考博客]((257条消息) DockerNginx部署前后端分离项目(SpringBootVue)的详细教程_在docker中安装nginx实现前后端分离_这里是杨杨吖的博客-CSDN博客) (DockerNginx部署前后端分离项目(SpringBootVue)) 安装docker # 1、yum 包更新到最新 yum update # 2、安装需要的软件包…