Python时间模块
来自:http://www.cnblogs.com/wj-1314/p/8533137.html
https://blog.csdn.net/huludan/article/details/50877802
http://blog.sina.com.cn/s/blog_6d963b350101g79h.html
在Python中,与时间处理有关的模块就包括:time,datetime,calendar(很少用,不讲),下面分别来介绍。
在开始之前,首先要说明几点:
一、在Python中,通常有这几种方式来表示时间:
- 时间戳(timestamp):通常来说,时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)开始按秒计算的偏移量,即从那时候到现在的总秒数。我们运行“type(time.time())”,返回的是float类型。返回时间戳方式的函数主要有time(),clock()等。
- 格式化的时间字符串(Format String)
- 结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,星期,一年中第几天,夏令时)。返回struct_time的函数主要有gmtime(),localtime(),strptime()。
二、几个定义
- UTC(Coordinated Universal Time)即格林威治天文时间,为世界标准时间。中国北京为UTC+8。
- DST(Daylight Saving Time)即夏令时。
索引(Index) 属性(Attribute) 值(Values) 0 tm_year(年) 比如2011 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 6 tm_wday(weekday) 0 - 6(0表示周一) 7 tm_yday(一年中的第几天) 1 - 366 8 tm_isdst(是否是夏令时) 默认为-1
三、time模块的方法
1、常用函数:
- time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。
- time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。
- time.time():返回当前时间的时间戳。
- time.mktime(t):将一个struct_time转化为时间戳。
- time.sleep(secs):线程推迟指定的时间运行。单位为秒。
- time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:'Sun Oct 1 12:04:38 2017'。如果没有参数,将会将time.localtime()作为参数传入。
- time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
- time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。
举个栗子:
import time # time模块的方法 # time.localtime([secs]):将一个时间戳转换为当前时区的struct_time。secs参数未提供,则以当前时间为准。 print(time.localtime()) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=14, tm_hour=16, tm_min=51, tm_sec=27, tm_wday=0, tm_yday=14, tm_isdst=0) # time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。 print(time.gmtime()) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=14, tm_hour=8, tm_min=51, tm_sec=27, tm_wday=0, tm_yday=14, tm_isdst=0) # time.time():返回当前时间的时间戳。 print(time.time()) # 1547455887.0113914 # time.mktime(t):将一个struct_time转化为时间戳。 a = time.localtime() print(time.mktime(a)) # 1547455887.0 # time.sleep(secs):线程推迟指定的时间运行。单位为秒。 time.sleep(0.1) print("hello world") # hello world # time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式: # 'Sun Oct 1 12:04:38 2017'。如果没有参数,将会将time.localtime()作为参数传入。 a = time.localtime() print(time.asctime(a)) # Mon Jan 14 16:51:27 2019 # time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。 # 如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。 print(time.ctime()) # Mon Jan 14 16:51:27 2019 # time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回) # 转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。 print(time.strftime("%Y-%m-%d %X", time.localtime())) # 2019-01-14 16:51:27 # time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。 print(time.strftime("2018-03-13 14:26:23")) # 2018-03-13 14:26:23
2、time模块常用的格式化字符串
| 格式 | 说明 |
|---|---|
| %a | 显示简化星期名称 |
| %A | 显示完整星期名称 |
| %b | 显示简化月份名称 |
| %B | 显示完整月份名称 |
| %c | 标准的日期的时间串 |
| %d | 显示当月第几天 |
| %H | 按24小时制显示小时 |
| %I | 按12小时制显示小时 |
| %j | 显示当年第几天 |
| %m | 显示月份 |
| %M | 显示分钟数 |
| %p | 上午还是下午: AM or PM |
| %S | 显示秒数 |
| %U | 一年中的星期数 |
| %w | 显示在星期中的第几天,默认从0开始表示周一 |
| %W | 和%U基本相同 |
| %x | 本地相应日期 |
| %X | 本地相应时间 |
| %y | 去掉世纪的年份(00 - 99),如12年 |
| %Y | 完整的年份 |
| %Z | 时区的名字(如果不存在为空字符) |
| %% | ‘%’字符 |
注:
- #%U 当年的第几周[00,53] 0=新一年的第一个星期一之前的所有天被认为是在0周【周日是每周第一天】
- #%W 当年的第几周[00,53] 0=新一年的第一个星期一之前的所有天被认为是在0周【周一是每周第一天】
举个栗子:
import time # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=14, tm_hour=19, tm_min=33, tm_sec=12, tm_wday=0, tm_yday=14, tm_isdst=0) print(time.localtime()) # 2019-01-14 19:33:12 print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 2019年01月14日 19时33分12秒 PM print(time.strftime('%Y{y}%m{m}%d{d} %H{h}%M{f}%S{s} %p').format(y='年',m='月',d='日',h='时',f='分',s='秒')) # 1547465592.156312 print(time.time())
3、时间函数之间的转化关系

四、datetime模块的方法
相对于time 模块,datetime模块的接口则更直观,更容易调用。
索引(Index) 属性(Attribute) 值(Values)0 tm_year(年) 比如20111 tm_mon(月) 1 - 122 tm_mday(日) 1 - 313 tm_hour(时) 0 - 234 tm_min(分) 0 - 595 tm_sec(秒) 0 - 616 tm_wday(weekday) 0 - 6(0表示周日)7 tm_yday(一年中的第几天) 1 - 3668 tm_isdst(是否是夏令时) 默认为-11、datetiem模块定义了下面这几个类:
datetime.date:表示日期的类。常用的属性有year, month, day;datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;datetime.datetime:表示日期时间。datetime.timedelta:表示时间间隔,即两个时间点之间的长度。datetime.tzinfo:与时区有关的相关信息。(这里不详细充分讨论该类,感兴趣的童鞋可以参考python手册)
我们需要记下下面几个方法就ok。
(1)d=datetime.datetime.now() 返回当前的datetime日期类型。
有d.timestamp(), d.today(), d.year, d.timetuple()等方法可以调
举个栗子:
import datetime # 返回当前的datetime日期类型 d = datetime.datetime.now() print(d) # 2019-01-14 17:13:14.837560 print(d.time()) # 17:13:14.837560 print(d.today()) # 2019-01-14 17:13:14.837561 print(d.year) # 2019 print(d.timestamp()) # 1547457194.83756 print(d.timetuple()) #time.struct_time(tm_year=2019, tm_mon=1, tm_mday=14, tm_hour=17, tm_min=13, tm_sec=14, tm_wday=0, tm_yday=14, tm_isdst=-1)
(2)datetime.date.fromtimestamp(123xxx) 把一个时间戳转为datetime日期类型。
import datetime import time d = datetime.date.fromtimestamp(0) print(d) # 1970-01-01 d = time.time() # 获取当前时间的时间戳 d1 = datetime.date.fromtimestamp(d) print(d1) # 2019-01-14
(3)时间运算
# 3时间运算 import datetime d = datetime.datetime.now() # 获取当前的日期类型 print(d) # 2019-01-14 17:32:35.370685 d1 = datetime.datetime(2017, 10, 1, 12, 53, 11, 821218) print(d1) # 2017-10-01 12:53:11.821218 # days、hours、minutes、seconds、weeks、。。。 d2 = datetime.datetime.now() + datetime.timedelta(4) # 当前时间 +4天 print(d2) # 2019-01-18 17:32:35.370685 d3 = datetime.datetime.now() + datetime.timedelta(hours=4) # 当前时间+4小时 print(d3) # 2019-01-14 21:32:35.370685 d4 = datetime.datetime.now() + datetime.timedelta(seconds=4) # 当前时间+4秒 print(d4) # 2019-01-14 17:32:39.370685
(4)时间替换
# 4时间替换 import datetime d = datetime.datetime.now() print(d) # 2019-01-14 17:36:29.100094 d1 = d.replace(year=2999,month=11,day=30) print(d1) # 2999-11-30 17:36:29.100094 d2 = datetime.date(2999, 11, 30) print(d2) # 2999-11-30
2、date类
date类表示一个日期。日期由年、月、日组成。date类的构造函数如下:
- date.min: 返回 date(MINYEAR, 1, 1).
- date.max: 返回 date(MAXYEAR, 12, 31).
- date.year: 返回 年, MINYEAR和MAXYEAR之间
- date.month: 返回 月, 1到12月之间
- date.day: 返回 1到 n 之间.注:
year的范围是[MINYEAR, MAXYEAR],即[1, 9999];
month的范围是[1, 12]。(月份是从1开始的,不是从0开始的_);
day的最大值根据给定的year, month参数来决定。例如闰年2月份有29天;
date类定义了一些常用的类方法与类属性,方便操作:
- date.max、date.min:date对象所能表示的最大、最小日期;
- date.resolution:date对象表示日期的最小单位。这里是天。
- date.today():返回一个表示当前本地日期的date对象;
- date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象
实例方法:
date.replace(year, month, day):返回一个相同值的data对象, 除了这些参数给关键字指定新的值. date.timetuple(): 返回一个time.struct_time对象. date.toordinal(): 返回一个Gregoian Calendar对象. date.weekday(): 返回day of the week. 星期一为0,星期日为6. date.isoweekday(): 返回day of the week. 星期一为1,星期日为7. date.isocalendar(): 返回一个三元组, (ISO year, ISO week number, ISO weekday). date.isoformat(): 返回 一个'YYYY-MM-DD'的字符串格式. date.ctime(): 返回一个字符串日期, d.ctime() 等同于 time.ctime(time.mktime(d.timetuple())). date.strftime(format): 返回一个字符串日期, 格式自定义.


浙公网安备 33010602011771号