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中处理日期和时间的功能列表 –