【文档学习】Python模块——time、datetime、calendar

本系列【文档学习】记录了博主学习Python3.7.2中的各个模块的笔记。官方文档。

本文记录了三个与日期和时间相关的模块:time、datetime和calendar。更新于2019.03.12。

time——时间访问和变换

官方文档

本模块提供了多样的与时间相关的函数。与之相关的函数包括datetimecalendar

尽管这个模块一直存在,但不是所有平台都能够调用所有函数。大多数定义在这个模块中的函数需要有相同名称的C library functions。建议参考平台文件(platform documentation),因为这些函数在不同平台有不同的语义。

下面阐述了一些术语和约定。

  • epoch是开始时间的节点,取决于平台。对于Unix,epoch是1970年1月1日0点(UTC)。查找给定平台的epoch可以看time.gmtime(0)。下图是博主电脑上显示的运行结果:
    在这里插入图片描述
  • seconds表示从epoch到现在流逝的秒数,通常排除leap seconds(闰秒)。在POSIX-compilant系统(诸如Linux,macOS,BSD等)平台上,总时间里面已经减去了闰秒。
    图片来源百度百科
  • 这个模块中的函数不能处理在epoch以前或很久以后的未来的时间,未来时间的截止时间由C library定义,对于32位系统,通常是2038年。
  • 千禧虫(Year 2000 (Y2K))问题:Python基于的是平台的C library,通常没有千禧虫问题,因为所有的时间在内部都是以秒计算的。函数strptime()在给定%y格式代码时可以解析2-digit年。当解析2-digit年时,其根据POSIX和ISO C standards将69-99映射成1969-1999年,将0-68映射成2000-2068年。
>>> import time
>>> time.strptime("30 Nov 00", "%d %b %y")   # doctest: +NORMALIZE_WHITESPACE
time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0,
                 tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)
  • UTC是Corrdinated Universal Time(世界通用时,正式名称是Greenwich Mean Time或GMT),首字母缩写UTC不是错误,而是英语和法语的妥协。
  • DST是Daylight Saving Time(夏令时),根据时区调整(通常)本年中的一个小时。DST规则很“玄幻”(由当地法律规定),而且每年可能不同。C library有一个保存你了local rules的table(考虑灵活性,通常从系统文件中读取)。
  • 不同real-time函数的精度可能根据表达其值的unit的不同而变化。比如,在大多数Unix系统中,钟每秒只走50或100次。
  • 另一方面,time()sleep()的精度要比对应的Unix中的高:时间由floating point numbers表述,time()返回能实现的最高精度(当Unix系统的gettimeofday()可获得时使用),而sleep()则可以接受一个非零分数(Unix的select()函数用于实现这个)
  • gmtime()localtime()strptime()返回的值,和asctime()mktime()strftime()可以接受的值,是一个有9个整数的sequence。
    struct_time看这些东西的描述。
    从版本3.3开始,扩展成当平台提供对应的struct_tm成员时,struct_time可以提供tm_gmtoff和tm_zone属性。
    版本3.6开始,struct_time属性tm_gmtoff和tm_zone在所有平台都可以了。
  • 用下面的函数实现不同时间表达之间的转换。
FromToUse
从epoch开始的秒UTC内的struct_timegmtime()
从epoch开始的秒当地时间的struct_timelocaltime()
UTC内的struct_time从epoch开始的秒calendar.timegm()
当地时间的struct_time从epoch开始的秒mktime()

函数

这一部分记录了time模块中包括的某些函数,看更多函数的说明请到官方文档

time.asctime([t])

将元祖(tuple)或struct_time描述的时间由gmtime()localtime()转换成如下形式的string:‘Sun Jun 20 23:21:05 1993’。如果不提供,当前时间将由localtime()返回。当地信息不被asctime()使用。

time.time() -> float

以浮点数形式返回从epoch开始的秒。具体epoch的日期和闰秒由平台决定。在Windows和大多数Unix系统中,epoch是1970年1月1日0点0分0秒(UTC),闰秒不计入时间。这个通常指向Unix time。查看给定平台的具体epoch请调用gmtime(0)

注意即使时间总是返回一个浮点数,但不是所有的系统都提供精度高于1秒的时间。尽管这个函数通常返回非下降的值,但是当系统时间在两次函数调用中间被置成之前的时间了,第二次调用也会返回小于第一次调用的值。

time()返回的数通常在UTC中被转换成一个更常用的时间格式(比如年、月、日、小时等)传递给gmtime()函数或将当地时间传递给localtime()函数。这两种情况下,都返回一个struct_time object,之后calendar date中的元素可以以attribute的形式被处理了。

class time.struct_time

提供下面的值:

IndexAttributeValues
0tm_year比如1993
1tm_mon范围1到12
2tm_mday范围1到31
3tm_hour范围0到23
4tm_min范围0到59
5tm_sec范围0到61(看strftime()描述中的**(2)**)
6tm_wday范围0到6,周一是0
7tm_yday范围1到366
8tm_isdst0、1或-1(看下面)
N/Atm_zone时区名称的缩写
N/Atm_gmtoffUTC秒以东的偏置(offset east of UTC)

datetime

博主暂时没用到,后续更新。官方文档。

calendar

博主暂时没用到,后续更新。官方文档。

更多内容,欢迎加入星球讨论。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值