Python 时间操作

2015-06-26 language python

Python 与时间处理相关的提供了 datetime、time、calendar 三个模块,而且还有三方模块 pytz 可以使用;另外,datetime 模块中又存在 datetime、time 类,不要与相应的模块混淆。

简介

datetime.date        理想化的日期对象,有年月日三个属性
datetime.time        理想化的时间对象,不考虑闰秒,有时分秒微秒和时区五个属性
datetime.datetime    上述两个对象的组合
datetime.timedelta   可用于上述三个对象的差值
datetime.tzinfo      时区信息

time                 各种时间操作转换的方法
calendar             提供日历相关的方法
pytz                 使用Olson TZ Database解决时区、夏令时等相关的计算问题

简单来说,在 Pyton 中,与时间相关的时间类型主要有如下的四种。

import time, datetime

#----- 1. time string 用于打印输出的字符串
time.ctime()             # 'Fri June 26 21:02:55 2015'

#----- 2. datetime tuple 包含了年月日-时分秒微妙-时区信息
datetime.datetime.now()  # datetime.datetime(2012, 12, 17, 21, 3, 44, 139715)

#----- 3. time tuple 也就是time.struct_time对象类型
datetime.datetime.now().timetuple()  # time.struct_time(tm_year=2017, tm_mon=1, tm_mday=2,
                    # tm_hour=10, tm_min=10, tm_sec=48, tm_wday=0, tm_yday=2, tm_isdst=-1)

#----- 4. timestamp 时间戳类型,从1970-01-01 00:00:00 GMT以来的秒数
time.time()              # 1355749338.05917

datetime transfrom

时间处理

很多与日期、时间的 api 都在 datetime 模块内,其中常见的操作如下。

import datetime

#----- 1. 日期输出格式化 datetime=>string
now = datetime.datetime.now()
now.strftime('%Y-%m-%d %H:%M:%S.%f')     # 2015-04-07 19:11:21.029213
now.strftime('%a, %d %b %Y %H:%M:%S %Z') # Sun, 01 Jan 2017 02:10:33 GMT

#----- 2. 日期输出格式化 string=>datetime
t_str = '2015-04-07 19:11:21'
d = datetime.datetime.strptime(t_str, '%Y-%m-%d %H:%M:%S')

#----- 3. 两个日期相差多少天
d1 = datetime.datetime.strptime('2015-06-15 18:11:27', '%Y-%m-%d %H:%M:%S')
d2 = datetime.datetime.strptime('2015-06-02 18:11:27', '%Y-%m-%d %H:%M:%S')
delta = d1 - d2
print(delta, delta.days)

#----- 4. 今天的n天后的日期
now = datetime.datetime.now()
delta = datetime.timedelta(days=3)
print((now + delta).strftime('%Y-%m-%d %H:%M:%S'))

其中,时间格式化的参数内容与 man date 相同,可以直接参考。

参考