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 - 60表示周一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 时区的名字(如果不存在为空字符)
%% ‘%’字符

注:

  1. #%U    当年的第几周[00,53] 0=新一年的第一个星期一之前的所有天被认为是在0周【周日是每周第一天】  
  2. #%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(年)                 比如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 - 60表示周日)
7             tm_yday(一年中的第几天)      1 - 366
8             tm_isdst(是否是夏令时)         默认为-1
 
1、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): 返回一个字符串日期, 格式自定义.

 

 
posted @ 2019-01-14 16:58  风聆  阅读(18)  评论(0)    收藏  举报