Skip to main content

[TOC]

日期和时间

Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。

Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。

时间间隔是以秒为单位的浮点小数。

每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。

Python 的 time 模块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳

import time  # 引入time模块

ticks = time.time()
print "当前时间戳为:", ticks
----------结果-----------
当前时间戳为: 1459994552.51

时间戳单位最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年。

时间元组

时间元组的结构通常为 (year, month, day, hour, minute, second, weekday, yearday, daylight saving time)

很多Python函数用一个元组装起来的9组数字处理时间:

序号字段
04位数年2008
11 到 12
21到31
3小时0到23
4分钟0到59
50到61 (60或61 是闰秒)
6一周的第几日0到6 (0是周一)
7一年的第几日1到366 (儒略历)
8夏令时-1, 0, 1, -1是决定是否为夏令时的旗帜

上述也就是struct_time元组。这种结构具有如下属性:

序号属性
0tm_year2008
1tm_mon1 到 12
2tm_mday1 到 31
3tm_hour0 到 23
4tm_min0 到 59
5tm_sec0 到 61 (60或61 是闰秒)
6tm_wday0到6 (0是周一)
7tm_yday1 到 366(儒略历)
8tm_isdst-1, 0, 1, -1是决定是否为夏令时的旗帜

获取当前时间

从返回浮点数的时间戳方式向时间元组转换,只要将浮点数传递给如localtime之类的函数。

import time

localtime = time.localtime(time.time())
print "本地时间为 :", localtime
---------结果----------------
本地时间为 : time.struct_time(tm_year=2016, tm_mon=4, tm_mday=7, tm_hour=10, tm_min=3, tm_sec=27, tm_wday=3, tm_yday=98, tm_isdst=0)

获取格式化的时间

你可以根据需求选取各种格式,但是最简单的获取可读的时间模式的函数是asctime()

import time

localtime = time.asctime( time.localtime(time.time()) )
print "本地时间为 :", localtime
-------结果----------------
本地时间为 : Thu Apr 7 10:05:21 2016
  1. 不带参数:
    • time.asctime() 不传入时间元组,默认使用当前时间的时间元组。它会返回当前时间的字符串表示,类似于 "Tue Sep 10 14:45:58 2022" 的格式。
  2. 带参数:
    • time.asctime(time.localtime(time.time())) 这里首先使用 time.time() 获取当前时间的时间戳,然后使用 time.localtime() 将时间戳转换为本地时间的时间元组,最后 time.asctime() 将这个时间元组转换为字符串格式的时间。

格式化日期

我们可以使用 time 模块的 strftime 方法来格式化日期

import time

# 格式化成2016-03-20 11:45:39形式
print time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

# 格式化成Sat Mar 28 22:24:24 2016形式
print time.strftime("%a %b %d %H:%M:%S %Y", time.localtime())

# 将格式字符串转换为时间戳
a = "Sat Mar 28 22:24:24 2016"
print time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y"))
----------结果--------------
2016-04-07 10:25:09
Thu Apr 07 10:25:09 2016
1459175064.0