搜索

中处理时间的模块有三个,本文没有模块才能随心所欲地用

处理时间一共有三个模块,只有将三个模块集成在一起,才能随心所欲地使用处理时间。这篇文章就是为此而写的。文章的重点是梳理三个模块的设计脉络,让大家记住里面的API。需要的时候可以找到对应的方法。但由于模块使用有限,篇幅所限,本文不涉及。

1 概述

该模块主要用来表示日期,也就是我们常说的年月日时分秒。该模块主要用于表示年、月、日、星期几。time模块主要关注时分秒,大致从上看,我们可以认为三者是一种互补的关系,各自关注一个领域。方便用户根据不同的使用目的选择方便的模块。

2.从time模块开始

为了学习时间模块,我们需要了解几个与时间相关的概念:

(1) 纪元

假设我们要用毫秒来表示时间,比如毫秒,那么有一个问题必须要解决,这个毫秒的起点是什么,也就是我们的时间基准点是什么?比如我说你1.8米高,那么这个高度就是指你站立的地面。这个时间参考点是纪元。在Unix系统中,这个参考点是1970年1月1日0:00的时间点。

(2) 格林威治标准时间、协调世界时

上面我们说epoch代表的是1970年的起点,那么这个1970年相对于哪个参考时间呢?一般来说,它是相对于格林威治标准时间,也称为GMT(Mean Time)时间,或UTC(Time)。为什么一个时基有两个名字?从历史上看,首先是 GMT,然后是 UTC。

UTC 是我们现在使用的时间标准,而 GMT 是旧的时间测量标准。UTC根据原子钟计算时间cst时间换算北京时间,而GMT根据地球自转和公转计算时间。

因此,可以认为UTC是真正的参考时间,GMT与UTC的偏差为0。

在实践中cst时间换算北京时间,我们的计算机中有一个硬件模块RCT,它会实时记录UTC时间。本模块采用独立电池供电,即使关机也不受影响。

有了epoch的时间参考和UTC的参考,我们就可以准确的表示一个时间。

(3) 夏令时、时区

虽然我们可以准确的表达一个时间,但是很多时候,我们还是需要根据区的实际情况来调整时间,最常见的就是time区,tzone,相信大家都是熟悉它。

这时候我们在说5:5的时间的时候,需要加上5:5的时间区来准确描述一个时间。

另一个时间调整是 DST。

DST的全称是Time,意思是为了充分利用阳光,减少电力消耗,对时间进行人为调整,具体取决于不同国家和地区的政策法规区 . 举个例子,假设你冬天7点起床,但夏天6点天亮,那么夏天来的时候人为加1小时,让你仍然认为自己7点起床时钟,但实际上它早了一个小时。

那么,如果我们好奇的话,就要问了,我们怎么知道tzone和DST的值呢?答案是通过环境变量。

这里我们仅以linux为例进行说明。

linux中有一个TZ环境变量,它的值类似于这样:

CST+08EDT,M4.1.0,M10.5.0,这个字符串可以这样理解,用空格隔开,分为三部分

CST+08 淡香水,M4.1.0,M10.5.0

第一部分的CST表示区的名字,即China Time,也就是我们所说的北京时间,+8表示北京时间加上8小时就是UTC时间

第二部分 EDT 表示夏令时的名称。我们说夏令时是不同的
中处理时间的模块有三个,本文没有模块才能随心所欲地用,因为各个国家和地区的政策法规不同。也可以像CST一样在EDT之后加上一个时间调整值。1986年到1992年实行过一段时间的夏令时,现在已经废除,所以以后不用再调整时间了。

第三部分表示执行夏令时的起止时间,我们不再详细解读。

(4) 时间的表示、获取和转换

在时间模块中获取时间的基本方法是

t = 时间。时间()

它以 UTC 时间返回自纪元以来的秒数(表示为浮点数)。

我们自然要将这个秒数转换成年月日时分秒的形式,转换有两种,一种还是使用UTC时间,一种是调整后的时间使用我们的当前 区 。

时间模块为我们提供了两种方法,

时间。(t)

时间.(t)

两者都返回具有以下属性的类的实例:

这种表示比以秒表示的时间更适合我们的理解。

如果不带参数调用这两个函数,它们会在内部调用time.time(),并使用返回的秒数进行转换。

相反,它还提供了将这两个转换为秒的方法。

.() 方法用于将 UTC(返回对象)从纪元转换为秒数

time.()用于将调整后的时间区(即返回对象)对象转换为从epoch开始的秒数

也就是说,该方法首先会在系统中找到时间区和夏令时信息,并利用这些信息调整时间,然后转换为秒。

另一个常见的需求是在时间和表示时间的字符串之间进行转换。

时间模块中的总和就是这样做的。

看名字应该就知道是什么意思了。

即时间,用于将时间格式化成字符串

即parse time,用于将字符串解析成时间。

需要注意的是,这里的时间是一个对象。

如何格式化时间是很简单的知识,这里是官网文档的内容。

除了这两个函数,时间模块还提供了两个方便的方法来帮助将时间转换为字符串

用于将对象转换为标准的24个字符的字符串,如下:

1993 年 6 月 20 日 23:21:05

ctime 方法具有相同的效果,只是它接收秒数。在内部,秒数会转换为first,然后都是一样的。

© 版权声明
THE END
喜欢就支持一下吧
点赞7赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码

    暂无评论内容