python的time和datetime模块

 

一、在Python中,通常有这几种方式来表示时间

  1. 时间戳
  2. 格式化的时间字符串
  3. 元组(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。

二、几个定义

        UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。
      时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
        元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。下面列出这种方式元组中的几个元素:

索引(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.localtime()
time.struct_time(tm_year=2018, tm_mon=7, tm_mday=21, tm_hour=17, tm_min=17, tm_sec=51, tm_wday=5, tm_yday=202, tm_isdst=0)
>>> time.localtime(1532100000)
time.struct_time(tm_year=2018, tm_mon=7, tm_mday=20, tm_hour=23, tm_min=20, tm_sec=0, tm_wday=4, tm_yday=201, tm_isdst=0)

2、time.gmtime([secs]):和localtime()方法类似,gmtime()方法是将一个时间戳转换为UTC时区(0时区)的struct_time。

>>> time.gmtime()
time.struct_time(tm_year=2018, tm_mon=7, tm_mday=21, tm_hour=9, tm_min=21, tm_sec=53, tm_wday=5, tm_yday=202, tm_isdst=0)
>>> time.gmtime(1532100000)
time.struct_time(tm_year=2018, tm_mon=7, tm_mday=20, tm_hour=15, tm_min=20, tm_sec=0, tm_wday=4, tm_yday=201, tm_isdst=0)

3、time.time():返回当前时间的时间戳,以秒为单位

>>> time.time()
1532164953.0462756

4、time.mktime(t):将一个struct_time转化为时间戳。

>>> t = time.localtime(1532100000)
>>> time.mktime(t)
1532100000.0

5、time.sleep(secs):线程推迟指定的时间运行。单位为秒。

    time.sleep(3):睡眠3秒

6、time.asctime([t]):把一个表示时间的元组或者struct_time表示为这种形式:'Sun Oct 1 12:04:38 2017'。如果没有参数,将会将time.localtime()作为参数传入。

>>> time.asctime()
'Sat Jul 21 17:27:53 2018'
>>> time.asctime(time.localtime(1532100000))
'Fri Jul 20 23:20:00 2018'

7、time.ctime([secs]):把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。

>>> time.ctime()
'Sat Jul 21 17:29:14 2018'
>>> time.ctime(1532100000)
'Fri Jul 20 23:20:00 2018'

8、time.strftime(format[, t]):把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。

>>> time.strftime("%Y-%m-%d %X", time.localtime())
'2018-07-21 17:31:54'
>>> time.strftime("%Y-%m-%d %X")
'2018-07-21 17:32:25'
>>> time.strftime("%x %X")
'07/21/18 17:33:42'

9、time.strptime(string[, format]):把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。

>>> time.strptime('2018-07-21 17:54',"%Y-%m-%d %H:%M")
time.struct_time(tm_year=2018, tm_mon=7, tm_mday=21, tm_hour=17, tm_min=54, tm_sec=0, tm_wday=5, tm_yday=202, tm_isdst=-1)
字符串转时间格式对应表
   
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

四、datetime模块

datetime模块定义了下面这几个类:

1、datetime.date:表示日期的类。常用的属性有year, month, day

2、datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond

3、datetime.datetime:表示日期时间

4、datetime.timedelta:表示时间间隔,即两个时间点之间的长度

5、datetime.tzinfo:与时区有关的相关信息。

时间运算

1、d=datetime.datetime.now() 返回当前的datetime日期类型

>>> d = datetime.datetime.now()
>>> d.timestamp()
1532167274.921079
>>> d.today()
datetime.datetime(2018, 7, 21, 18, 1, 24, 429623)
>>> d.year
2018
>>> d.timetuple()
time.struct_time(tm_year=2018, tm_mon=7, tm_mday=21, tm_hour=18, tm_min=1, tm_sec=14, tm_wday=5, tm_yday=202, tm_isdst=-1)

2.datetime.date.fromtimestamp(322222) 把一个时间戳转为datetime日期类型

>>> d = datetime.date.fromtimestamp(1532100000)
>>> d.year
2018
>>> d.timetuple()
time.struct_time(tm_year=2018, tm_mon=7, tm_mday=20, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=201, tm_isdst=-1)
>>> d.today()
datetime.date(2018, 7, 21)

3.时间运算

>>> datetime.datetime.now()

datetime.datetime(2017, 10, 1, 12, 53, 11, 821218)

>>> datetime.datetime.now() + datetime.timedelta(4) #当前时间 +4天

datetime.datetime(2017, 10, 5, 12, 53, 35, 276589)

>>> datetime.datetime.now() + datetime.timedelta(hours=4) #当前时间+4小时

datetime.datetime(2017, 10, 1, 16, 53, 42, 876275)

4.时间替换

>>> d.replace(year=2999,month=11,day=30)

datetime.date(2999, 11, 30)

猜你喜欢

转载自blog.csdn.net/longwen_zhi/article/details/81146741