title: Python之时间模块
tags: Python
categories:


Python之时间模块(time模块和datetime模块)

time模块

time模块中时间表现的格式主要有三种:

a、timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量

b、struct_time时间元组,共有九个元素组。

c、format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。

三者之间的转换为:

Python之时间模块 - 图1

时间格式转换

timestamp

time()函数返回的是时间戳(timestamp)。所谓时间戳指的是从1970年1月1日00:00:00开始按秒计算的偏移量。其他返回时间戳方式的函数还有clock()。

  1. >>>import time
  2. >>>time.time()1578904156.5768752

ctime()函数可以将一个时间戳转化为字符串的形式,默认time.time()为参数。

  1. >>>import time
  2. >>>time.ctime()'Mon Jan 13 16:36:38 2020'
  3. >>>time.ctime(1500000000)'Fri Jul 14 10:40:00 2017'

gmtime()用于获取UTC时间,UTC时间实际就是格林尼治时间,它与中国时间的时差为八个小时。

  1. >>>import time
  2. >>>time.gmtime()
  3. time.struct_time(tm_year=2020, tm_mon=1, tm_mday=13, tm_hour=8, tm_min=38, tm_sec=15, tm_wday=0, tm_yday=13, tm_isdst=0)

localtime()函数用于获取当前时区的当前时间。

  1. >>>import time
  2. >>>time.localtime()
  3. time.struct_time(tm_year=2020, tm_mon=1, tm_mday=13, tm_hour=16, tm_min=38, tm_sec=45, tm_wday=0, tm_yday=13, tm_isdst=0)

strftime()函数把一个代表时间的元组或者struct_time转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。

  1. >>> time.strftime("%Y-%m-%d %X")'2020-01-13 16:39:48'
  2. >>> time.strftime("%Y-%m-%d %H:%M:%S")'2020-01-13 16:40:22'
  3. >>> time.strftime("%Y-%m-%d %X", time.localtime())'2020-01-13 16:40:22'

strptime()把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作

  1. >>>import time
  2. >>>time.strptime('2020-01-13 16:40:22','%Y-%m-%d %X')
  3. time.struct_time(tm_year=2020, tm_mon=1, tm_mday=13, tm_hour=16, tm_min=40, tm_sec=22, tm_wday=0, tm_yday=13, tm_isdst=-1)

mktime()函数可以将struct_time转换成用时间的浮点数表示

  1. >>> time.mktime(time.gmtime())'1578876099.0'
  2. >>> time.mktime(time.localtime())'1578904913.0'

sleep()函数线程推迟指定的时间运行,单位为秒。

  1. import time
  2. >>> time.sleep(3) #表示延迟3秒后程序继续运行

struct_time元组元素结构

  1. 属性
  2. tm_year(年) 比如2011
  3. tm_mon(月) 1 - 12
  4. tm_mday(日) 1 - 31
  5. tm_hour(时) 0 - 23
  6. tm_min(分) 0 - 59
  7. tm_sec(秒) 0 - 61
  8. tm_wdayweekday 0 - 60表示周日)
  9. tm_yday(一年中的第几天) 1 - 366
  10. tm_isdst(是否是夏令时) 默认为-1

format time

  1. %y 两位数的年份表示(00-99
  2. %Y 四位数的年份表示(000-9999
  3. %m 月份(01-12
  4. %d 月内中的一天(0-31
  5. %H 24小时制小时数(0-23
  6. %I 12小时制小时数(01-12
  7. %M 分钟数(00=59
  8. %S 秒(00-59
  9. %a 本地简化星期名称
  10. %A 本地完整星期名称
  11. %b 本地简化的月份名称
  12. %B 本地完整的月份名称
  13. %c 本地相应的日期表示和时间表示
  14. %j 年内的一天(001-366
  15. %p 本地A.M.或P.M.的等价符
  16. %U 一年中的星期数(00-53)星期天为星期的开始
  17. %w 星期(0-6),星期天为星期的开始
  18. %W 一年中的星期数(00-53)星期一为星期的开始
  19. %x 本地相应的日期表示
  20. %X 本地相应的时间表示
  21. %Z 当前时区的名称
  22. %% %号本身

datetime模块

datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo。

  1. date类
    1. date.maxdate.mindate对象所能表示的最大、最小日期;
    2. date.resolutiondate对象表示日期的最小单位。这里是天。
    3. date.today():返回一个表示当前本地日期的date对象;
    4. date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象;
  1. time类
    1. time.mintime.maxtime类所能表示的最小、最大时间。其中,time.min = time(0, 0, 0, 0), time.max = time(23, 59, 59, 999999);
    2. time.resolution:时间的最小单位,这里是1微秒;
  1. datetime类
    1. datetime.today():返回一个表示当前本地时间的datetime对象;
    2. datetime.now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;
    3. datetime.utcnow():返回一个当前utc时间的datetime对象;#格林威治时间
    4. datetime.fromtimestamp(timestamp[, tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息;
    5. datetime.utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象;
    6. datetime.combine(date, time):根据datetime,创建一个datetime对象;
    7. datetime.strptime(date_string, format):将格式字符串转换为datetime对象;
  1. timedalta类
    使用timedelta可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算。
    1. import datetime
    2. print('microseconds:', datetime.timedelta(microseconds=1)) #microseconds: 0:00:00.000001
    3. print('milliseconds:', datetime.timedelta(milliseconds=1)) #milliseconds: 0:00:00.001000
    4. print('seconds :', datetime.timedelta(seconds=1)) #seconds : 0:00:01
    5. print('minutes :', datetime.timedelta(minutes=1)) #minutes : 0:01:00
    6. print('hours :', datetime.timedelta(hours=1)) #hours : 1:00:00
    7. print('days :', datetime.timedelta(days=1)) #days : 1 day, 0:00:00
    8. print('weeks :', datetime.timedelta(weeks=1)) #weeks : 7 days, 0:00:00
  1. tzinfo时区类
    1. # 可以通过判断datetime对象的tzinfo属性,来获悉他是何种类型
    2. import datetimeimport pytz
    3. now=datetime.datetime.now()
    4. print(now) #2020-01-13 16:29:16.578841
    5. print(now.tzinfo) #None