关于datetime时间操作在日常工作中也没有经常用到,但是每次要用时却又想不起来,与其重复查文档不如总结一下备忘。本文只简单记录了常用的一些方法,不同类型格式之间的转换(如时间对象类型、字符串、timestamp、time tuple类型)以及时区问题等暂未深入了解。

datetime模块

datetime 模块主要用来操作日期和时间

date日期对象

import datetime
print datetime.date.today() //返回当前本地日期
print datetime.date(2016,11,16) //生成日期对象
//stdout
2016-11-16
2016-11-16

time时间对象

import datetime
Time = datetime.time(12,24,50) //生成时间对象
print Time
print Time.hour
print Time.minute
print Time.second
//stdout
12:24:50
12
24
50

datetime日期时间对象

import datetime
print datetime.datetime(2016,11,16,12,24,50) //生成datetime对象
print datetime.datetime.now() //返回当前日期时间
print datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S') //对当前时间格式化并返回字符串(将datetime对象转换为str)
print datetime.datetime.now().ctime() //返回当前时间字符串
print datetime.datetime.strptime('2016-11-16 16:13:43','%Y-%m-%d %H:%M:%S')//将字符串转换为datetime对象
//stdout
2016-11-16 12:24:50
2016-11-16 16:58:47.913755
2016-11-16 16:58:47
Wed Nov 16 16:58:47 2016
2016-11-16 16:13:43

timedelta对象

timedelta对象表示一个时间段,即两个日期 (date) 或时间 (time) 之间的差。利用timedelta可实现时间的相加减,当然时间对象本身就能直接进行算术运算和比较运算。

datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

import datetime
print datetime.date.today() + datetime.timedelta(days=3) //3天后
print datetime.date.today() - datetime.timedelta(days=3) //3天前
print datetime.date.today() + datetime.timedelta(days=-3) //3天前(参数可为负)
print datetime.datetime.now() + datetime.timedelta(weeks=1) //1个星期后
print datetime.datetime.now() + datetime.timedelta(days=1) //明天
print datetime.datetime.now() + datetime.timedelta(hours=3) //3小时后
print datetime.datetime.now() + datetime.timedelta(minutes=5) //5分钟后
print datetime.datetime.now() + datetime.timedelta(seconds=60) //60
//stdout
2016-11-19
2016-11-13
2016-11-13
2016-11-23 17:14:26.311780
2016-11-17 17:14:26.311797
2016-11-16 20:14:26.311806
2016-11-16 17:19:26.311815
2016-11-16 17:15:26.311823

time模块

time模块提供时间相关的功能

import time
print time.ctime() //返回当前时间字符串
print time.localtime() //返回当前时间timetuple
time.sleep(10) //睡眠10
print time.strftime('%Y-%m-%d %H:%M:%S') //格式化并返回字符串
//stdout
Wed Nov 16 17:25:50 2016
time.struct_time(tm_year=2016, tm_mon=11, tm_mday=16, tm_hour=17, tm_min=25, tm_sec=50, tm_wday=2, tm_yday=321, tm_isdst=0)
2016-11-16 17:26:00

strftime()格式化字符串含义

Directive Meaning Example
%a 星期名称简写 Sun, Mon, …, Sat
%A 星期名称的全称 Sunday, Monday, …, Saturday
%w 十进制数表示的星期[0表示星期日] 0, 1, …, 6
%d 十进制数表示的一个月的第几天 01, 02, …, 31
%b 月份名称的简写 Jan, Feb, …, Dec
%B 月份名称的全称 January, February, …, December
%m 十进制数表示的月份 01, 02, …, 12
%y 十进制数表示的年份,不带有世纪 00, 01, …, 99
%Y 十进制数表示的年份,带有世纪 1970, 1988, 2001, 2013
%H 十进制数表示的小时(24小时制) 00, 01, …, 23
%I 十进制数表示的小时(12小时制) 01, 02, …, 12
%p AM or PM AM, PM
%M 十进制数表示的分钟 00, 01, …, 59
%S 十进制表示的秒数 00, 01, …, 59

数据类型转换

参考

datetime官方文档