Python 3 – 日期和时间

Python 3 – 日期和时间

Python程序可以以多种方式处理日期和时间。在计算机中,转换日期格式是一个常见的任务。Python的time和calendar模块有助于跟踪日期和时间。

什么是Tick(滴答)?

时间间隔是浮点数,单位为秒。特定的瞬间时间表示为自1970年1月1日午夜以来的秒数(开始时间或纪元)。

Python中有一个受欢迎的模块 time(时间) ,该模块提供了用于处理时间的功能,并且提供了不同表示之间的转换函数。函数 time.time() 返回自1970年1月1日午夜以来的当前系统时间(以秒为单位)。

示例

#!/usr/bin/python3
import time;      # 需要包含time模块

ticks = time.time()
print ("自1970年1月1日午夜以来的秒数:", ticks)

会生成如下结果−

自1970年1月1日午夜以来的秒数: 1455508609.34375

使用Tick(滴答)执行时间计算非常容易。但是,在纪元之前的日期不能用此方式表示。而且,这种方式也不能表示太远的未来日期——在UNIX和Windows中,截止时间是2038年。

什么是TimeTuple?

Python许多时间函数使用一个9个数字的元组处理时间,如下所示−

索引 字段
0 4位数年份 2016
1 月份 1至12
2 1至31
3 小时数 0到23
4 分钟数 0到59
5 秒数 0到61(60或61是闰秒)
6 星期几 0到6(0表示星期一)
7 年度日 1至366(儒略日)
8 夏令时 -1,0,1,-1表示程序库决定DST

例如−

import time

print (time.localtime());

将会产生如下结果 −

time.struct_time(tm_year = 2016, tm_mon = 2, tm_mday = 15, tm_hour = 9, 
   tm_min = 29, tm_sec = 2, tm_wday = 0, tm_yday = 46, tm_isdst = 0)

上面的元组等同于 struct_time 结构。该结构具有以下属性−

序号 属性名 可能值
0 tm_year 2016
1 tm_mon 1至12
2 tm_mday 1至31
3 tm_hour 0至23
4 tm_min 0至59
5 tm_sec 0至61(60或61是闰秒)
6 tm_wday 0至6(0代表周一)
7 tm_yday 1至366(儒略日)
8 tm_isdst -1, 0, 1, -1 表示由系统决定 DST(夏令时)

获取当前时间

要将秒钟自纪元以来的时间转换为 timetuple,请将浮点值传递给函数(例如localtime),该函数返回带有所有有效九个项目的时间元组。

#!/usr/bin/python3
import time

localtime = time.localtime(time.time())
print ("本地当前时间为:", localtime)

这将产生以下结果,可按任何其他可呈现的格式进行格式化 −

本地当前时间为: time.struct_time(tm_year = 2016, tm_mon = 2, tm_mday = 15, 
   tm_hour = 9, tm_min = 29, tm_sec = 2, tm_wday = 0, tm_yday = 46, tm_isdst = 0)

获取格式化时间

您可以根据要求格式化任何时间,但获取可读格式中的时间的简单方法是 asctime()

#!/usr/bin/python3
import time

localtime = time.asctime( time.localtime(time.time()) )
print ("本地当前时间为:", localtime)

这将产生以下结果 −

本地当前时间为: Mon Feb 15 09:34:03 2016

获取月份的日历

calendar模块提供了许多方法来处理年度和月度日历。 这里,我们打印给定月份(2016年2月)的日历 −

#!/usr/bin/python3
import calendar

cal = calendar.month(2016, 2)
print ("以下是日历:")
print (cal)

这将产生以下结果 −

以下是日历:
   February 2016
Mo Tu We Th Fr Sa Su
 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

时间模块

Python中有一个受欢迎的模块 time ,它提供了处理时间以及在表示之间进行转换的函数。 下面是所有可用方法的列表。

序号 函数及说明
1 time.altzone 当地夏令时时区与 UTC 的秒数差值,如果定义了夏令时时区。这个值是负数,如果当地夏令时时区在 UTC 的东边(如欧洲西部包括英国)。如果采用夏令时,则使用此值。
2 time.asctime([tupletime]) 接受一个时间元组并返回一个可读的 24 字符串,例如 ‘Tue Dec 11 18:07:14 2008’。
3 time.clock( ) 返回当前 CPU 时间作为秒的浮点数。为了测量不同方法的计算成本,time.clock 的值比 time.time 更有用。
4 time.ctime([secs]) 类似于 asctime(localtime(secs)),如果没有参数则类似于 asctime()
5 time.gmtime([secs]) 接受从 epoch 起的秒数,并返回具有 UTC 时间的时间元组 t。请注意−t.tm_isdst 总是 0。
6 time.localtime([secs]) 接受从 epoch 起的秒数,并返回具有当地时间的时间元组 t(t.tm_isdst 为 0 或 1,取决于是否按当地规则适用于时间戳 secs 的 DST)。
7 time.mktime(tupletime) 接受一个在当地时间表示为时间元组的瞬时,并返回一个浮点值,该值表示自 epoch 起的时间。
8 time.sleep(secs) 暂停调用线程 secs 秒。
9 time.strftime(fmt[,tupletime]) 接受在当地时间表示为时间元组的瞬时,并返回表示如 string fmt 指定的瞬时的字符串。
10 time.strptime(str,fmt = ‘%a %b %d %H:%M:%S %Y’) 根据格式字符串 fmt 解析str,并返回时间元组格式的瞬时。
11 time.time( ) 返回当前的时间瞬时,即自 epoch 起的秒数的浮点数。
12 time.tzset() 重置库例程使用的时间转换规则。TZ 环境变量指定如何执行此操作。

time 模块有两个重要的属性。它们是 −

序号 属性与描述
1 time.timezone 属性time.timezone是本地时区(不含DST)相对于UTC的秒偏移量(大于0表示在美洲;小于等于0表示在大部分欧洲、亚洲、非洲地区)。
2 time.tzname 属性time.tzname是依赖于语言环境的一对字符串,是不含DST和含DST的本地时区名称。

日历模块

日历模块提供了与日历相关的函数,包括打印给定月份或年份的文本日历等函数。

默认情况下,周一是一周的第一天,周日是最后一天。要更改这种设置,可以调用 calendar.setfirstweekday() 函数。

以下是 calendar 模块中可用的函数列表−

序号 功能和描述
1 calendar.calendar(year,w = 2,l = 1,c = 6) 返回一个多行字符串,其中包含格式为每个日期为w个字符的三列,由c个空格隔开的一年year的日历。每行的长度为21w+18+2c。l是每周的行数。
2 calendar.firstweekday( ) 返回每周开始的工作日的当前设置。默认情况下,当导入日历时,这是0,表示星期一。
3 calendar.isleap(year) 如果year是闰年,则返回True;否则返回False。
4 calendar.leapdays(y1,y2) 返回在范围(y1,y2)内的年份中的闰年天数的总数。
5 calendar.month(year,month,w = 2,l = 1) 返回一个多行字符串,其中包含一年year的月份为month的日历,每周一行,加上两个标题行。w是每个日期的字符宽度,每行长度为7*w+6。l是每周的行数。
6 calendar.monthcalendar(year,month) 返回由整数列表组成的列表。每个子列表表示一周。月份year年的month月之外的日期设置为0;月份内的日期设置为其日期,从1开始。
7 calendar.monthrange(year,month) 返回两个整数。第一个是年year的月份月第一天的工作日代码;第二个是该月的天数。工作日代码为0(星期一)至6(星期日);月份编号为1至12。
8 calendar.prcal(year,w = 2,l = 1,c = 6) 类似于print calendar.calendar(year,w,l,c)。
9 calendar.prmonth(year,month,w = 2,l = 1) 类似于print calendar.month(year,month,w,l).
10 calendar.setfirstweekday(weekday) 将每周的第一天设置为工作日代码为weekday。工作日代码为0(星期一)至6(星期日)。
11 calendar.timegm(tupletime) time.gmtime的相反操作:接受time-tuple形式的时间瞬间,并将相同的瞬间作为自纪元以来的浮点秒数返回。
12 calendar.weekday(year,month,day) 返回给定日期的工作日代码。工作日代码为0(星期一)至6(星期日);月份编号为1(一月)至12(十二月)。

其他模块和功能

如果您感兴趣,那么在此处可以找到一些其他重要模块和用于在Python中处理日期和时间的功能列表 –

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程