time模块--时间获取和转换

  1. time模块提供各种时间相关的功能
  2. 与时间相关的模块有:time,datetime,calendar

必要说明:

  1. 这个模块的功能不是适用于所有的平台
  2. 这个模块中定义的大部分函数是调用C平台上的同名函数实现

一些术语和约定的解释:

  1. 1.时间戳(timestamp)的方式:通常来说,时间戳表示的是从19701月1日开始按秒计算的偏移量(time.gmtime(0))此模块中的函数无法处理1970纪元年以前的时间或太遥远的未来(处理极限取决于C函数库,对于32位系统而言,是2038年)
  2. 2.UTC(Coordinated Universal Time,世界协调时)也叫格林威治天文时间,是世界标准时间.在我国为UTC+8
  3. 3.DST(Daylight Saving Time)即夏令时
  4. 4.一些实时函数的计算精度可能不同

时间元祖(time.struct_time)

gmtime(),localtime()strptime()以时间元祖(struct_time)的形式返回

索引值(index) 属性(Attribute) 值(Values)
0 tm_year(年) (例如:2015)
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(60代表闰秒,61是基于历史原因保留)
6 tm_wday(星期几) 0-6(0表示星期一)
7 tm_yday(一年中的第几天) 1-366
8 tm_isdst(是否为夏令时) 0,1,-1(-1代表夏令时)

time.altzone

  1. 返回格林威治西部的夏令时地区的偏移秒数,如果该地区在格林威治东部会返回负值(如西欧,包括英国),对夏令时启用地区才能使用

time.asctime([t])

  1. 接受时间元组并返回一个可读的形式"Tue May 30 17:17:30 2017"(2017530日周二171730秒)的24个字符的字符串

time.clock()

  1. 用以浮点数计算的秒数返回当前的CPU时间,用来衡量不同程序的耗时,比time.time()更有用
  2. python3.3以后不被推荐使用,该方法依赖操作系统,建议使用per_counter(返回系统运行时间)或process_time(返回进程运行时间)代替

time.ctime([secs])

  1. 作用相当于asctime(localtime(secs)),未给参数相当于asctime()

time.gmtime([secs])

  1. 接收时间辍(1970纪元年后经过的浮点秒数)并返回格林威治天文时间下的时间元组t(t.tm_isdst始终为0)

time.daylight

  1. 如果夏令时被定义,则该值为非零

time.localtime([secs])

  1. 接收时间辍(1970纪元年后经过的浮点秒数)并返回当地时间下的时间元组t(t.tm_isdst可取为0或1,取决于当地当时是不是夏令时)

time.mktime(t)

  1. 接受时间元组并返回时间辍(1970纪元年后经过的浮点秒数)

time.perf_counter()

  1. 返回计时器的精准时间(系统的运行时间),包含整个系统的睡眠时间.由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的

time.process_time()

  1. 返回当前进程执行CPU的时间总和,不包含睡眠时间.由于返回值的基准点是未定义的,所以只有连续调用的结果之间的差才是有效的

time.sleep(secs)

  1. 推迟调用线程的运行,secs的单位是秒

time.strftime(format[,t])

  1. 把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串.如果t未指定,将传入time.localtime(),如果元组中任命一个元素越界,将会抛出ValueError异常
  2. format格式如下:
  3. %a 本地(local)简化星期名称
  4. %A 本地完整星期名称
  5. %b 本地简化月份名称
  6. %B 本地完整月份名称
  7. %c 本地相应的日期和时间表示
  8. %d 一个月中的第几天(01-31)
  9. %H 一天中的第几个小时(24小时制,00-23)
  10. %l 一天中的第几个小时(12小时制,01-12)
  11. %j 一年中的第几天(01-366)
  12. %m 月份(01-12)
  13. %M 分钟数(00-59)
  14. %p 本地am或者pm的相应符
  15. %S 秒(01-61)
  16. %U 一年中的星期数(00-53,星期天是一个星期的开始,第一个星期天之前的所有天数都放在第0周)
  17. %w 一个星期中的第几天(0-6,0是星期天)
  18. %W 和%U基本相同,不同的是%W以星期一为一个星期的开始
  19. %x 本地相应日期
  20. %X 本地相应时间
  21. %y 去掉世纪的年份(00-99)
  22. %Y 完整的年份
  23. %z 用+HHMM或者-HHMM表示距离格林威治的时区偏移(H代表十进制的小时数,M代表十进制的分钟数)
  24. %Z 时区的名字(如果不存在为空字符)
  25. %% %号本身
  26. %p只有与%I配合使用才有效果
  27. 当使用strptime()函数时,只有当在这年中的周数和天数被确定的时候%U和%W才会被计算

time.strptime(string[,format])

  1. 把一个格式化时间字符串转化为struct_time,实际上它和strftie()是逆操作

time.time()

  1. 返回当前时间的时间戳(1970元年后的浮点秒数)

time.timezone()

  1. 是当地时区(未启动夏令时)距离格林威治的偏移秒数(美洲>0,欧洲大部分,亚洲,非洲<=0)

time.tzname

  1. 包含两个字符串的元组,第一是当地夏令时区的名称,第二是当地的DST时区的名称

下面是一些经常会用到的例子

  1. # coding: utf-8
  2. # @Time: 2019/9/18 11:14
  3. # @Author:renpingsheng
  4. from __future__ import division
  5. import time
  6. import datetime
  7. def get_cutten_timestr(flag=True):
  8. """
  9. 获取当前时间字符串
  10. @return:
  11. """
  12. if flag:
  13. return datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
  14. return datetime.datetime.now().strftime('%Y-%m-%d')
  15. def parse_timestr_to_timestamp(time_str, flag=True):
  16. """
  17. 把时间字符串转换为时间戳格式
  18. :param time_str: 时间字符串,格式为:2019-01-01 12:12:12 或 2019-01-01
  19. :param flag: 标志位,决定输入时间字符串的格式
  20. :return: 时间戳格式
  21. """
  22. if flag:
  23. struct_time = time.strptime(time_str, "%Y-%m-%d %H:%M:%S") # 2019-01-01 12:12:12
  24. else:
  25. struct_time = time.strptime(time_str, "%Y-%m-%d") # 2019-01-01
  26. return time.mktime(struct_time)
  27. def parse_month_to_timestamp(month_str, flag=True):
  28. """
  29. 把月份字符串转化为时间戳
  30. :param month_str: 月份,例如:2019-01 或者 2019.01
  31. :param flag: 标志位,控制输入月份字符串的格式
  32. :return:
  33. """
  34. if flag:
  35. struct_time = time.strptime(month_str, "%Y-%m")
  36. else:
  37. struct_time = time.strptime(month_str, "%Y.%m")
  38. return time.mktime(struct_time)
  39. def parse_timestamp_to_timestr(time_stamp, flag=True):
  40. """
  41. 把时间戳转换为时间字符串
  42. :param time_stamp: 时间戳
  43. :param flag: 标志位,可以指定输出时间字符串的格式
  44. :return: 时间字符串,格式为:2019-01-01 12:12:12 或 2019-01-01
  45. """
  46. localtime = time.localtime(time_stamp)
  47. if flag:
  48. time_str = time.strftime("%Y-%m-%d %H:%M:%S", localtime)
  49. else:
  50. time_str = time.strftime("%Y-%m-%d", localtime)
  51. return time_str
  52. def get_day_list(start_timestamp, end_timestamp, flag=True):
  53. """
  54. 传入开始时间戳和结束时间戳,获取时间段内的日期列表
  55. :param start_timestamp: 开始时间戳
  56. :param end_timestamp: 结束时间戳
  57. :param flag: 标志位
  58. :return: 日期列表
  59. """
  60. tmp = range(int(start_timestamp), int(end_timestamp), 3600 * 24)
  61. if flag:
  62. tmp_range = [{"day_str": parse_timestamp_to_timestr(i, flag=False)} for i in tmp]
  63. else:
  64. tmp_range = [parse_timestamp_to_timestr(i, flag=False) for i in tmp]
  65. return tmp_range
  66. def day_range(interval_day):
  67. """
  68. 获取指定天内的时间字符串的列表
  69. :return:
  70. """
  71. c_time = (int(time.time() / (24 * 3600)) + 1) * 24 * 3600
  72. day_range_str = c_time - 24 * 3600 * interval_day
  73. day_list = [{"day_str": parse_timestamp_to_timestr(t, flag=False)} for t in range(day_range_str, c_time, 3600 * 24)]
  74. return day_list
  75. def covert_time(time_str):
  76. """
  77. 把时间段转换为秒数
  78. :param time_str:
  79. :return:
  80. """
  81. if time_str.endswith("h"):
  82. stamp = float(time_str.strip("h")) * 3600
  83. elif time_str.endswith("m"):
  84. stamp = float(time_str.strip("m")) * 60
  85. else:
  86. stamp = float(time_str)
  87. return stamp
  88. def parse_timestr_to_datetime(timestr, flag=1):
  89. """
  90. 把时间字符串转化为datetime
  91. :param timestr: 时间字符串,例如:2019-01-01 12:12:12 或者 2019.01.01 12:12:12
  92. :param flag: 标志位,控制输入时间字符串的格式
  93. :return:
  94. """
  95. if flag == 1:
  96. tmp_datetime = datetime.datetime.strptime(timestr, "%Y-%m-%d %H:%M:%S")
  97. elif flag == 2:
  98. tmp_datetime = datetime.datetime.strptime(timestr, "%Y.%m.%d %H:%M:%S")
  99. elif flag == 3:
  100. tmp_datetime = datetime.datetime.strptime(timestr, "%Y-%m-%d")
  101. elif flag == 4:
  102. tmp_datetime = datetime.datetime.strptime(timestr, "%Y-%m-%d %H:%M")
  103. else:
  104. tmp_datetime = datetime.datetime.strptime(timestr, "%Y-%m-%d %H:%M:%S")
  105. return tmp_datetime
  106. ################################################
  107. def parse_format_timestr(format_timestr):
  108. """
  109. 将格式字符串转换为时间戳
  110. :param format_timestr: 格式字符串,格式: "Sat Mar 28 22:24:24 2016"
  111. :return:
  112. """
  113. tmp_timestamp = time.mktime(time.strptime(format_timestr, "%a %b %d %H:%M:%S %Y"))
  114. return tmp_timestamp
  115. def parse_datetime_to_string(datetime_str, flag=True):
  116. """
  117. 把datetime时间转化成时间字符串
  118. :param datetime_str: datetime生成的时间,例子:datetime.datetime.now()
  119. 或者: datetime.datetime.now() - datetime.timedelta(hours=1) # 一个小时之前
  120. 或者: datetime.datetime.now() - datetime.timedelta(days=1) # 一天之前
  121. :return:
  122. """
  123. # 将日期转化为字符串 datetime => string
  124. # 在数据库中定义字段信息时为:models.DateTimeField(auto_now_add=True)
  125. # 查询数据库之后,使用此方法把查询到的时间转换成可用的时间字符串
  126. # when_insert__range=(an_hour_time, now_time)
  127. # an_hour_time和 now_time 都是 datetime时间字符串,查询两个datetime时间字符串之间的数据
  128. if flag:
  129. return datetime_str.strftime('%Y-%m-%d %H:%M:%S')
  130. else:
  131. return datetime_str.strftime('%Y-%m-%d')
  132. def parse_datetime_to_timestamp(datetime_str):
  133. """
  134. 把datetime转化成时间戳
  135. @param datetime_str: datetime时间,比如:datetime.datetime.now()
  136. @return: 时间戳,比如:1565663994.0
  137. """
  138. return time.mktime(datetime_str.timetuple())
  139. def parse_timestamp_to_datetime(timestamp, flag=True):
  140. """
  141. 把时间戳转化为datetime时间
  142. @param timestamp: 时间戳,比如:1553361411
  143. @param flag: 标志位,决定转化成datetime的时间
  144. @return:
  145. """
  146. if flag:
  147. return datetime.datetime.fromtimestamp(timestamp) # 东八区的datetime时间
  148. return datetime.datetime.utcfromtimestamp(timestamp) # 正常的UTC时间
  149. def parse_dur_time(d1, d2):
  150. """
  151. 获取两个datetime时间 间隔的日期数(天数,小时数和秒数)
  152. :param d1: 开始时间
  153. :param d2: 结束时间
  154. :return:
  155. """
  156. dur_str = ""
  157. dur_day = (d2 - d1).days
  158. dur_second = (d2 - d1).seconds
  159. if dur_day > 0:
  160. dur_str += "%s天" % str(dur_day)
  161. if dur_second - 3600 > 0:
  162. dur_hour = dur_second // 3600
  163. dur_str += "%s小时" % str(dur_hour)
  164. if (dur_second % 3600) > 60:
  165. dur_minute = (dur_second % 3600) // 60
  166. dur_str += "%s分钟" % str(dur_minute)
  167. dur_str += "%s秒" % str(dur_second % 60)
  168. return dur_str
  169. def get_month_start(datetime_str):
  170. """
  171. datetime_str可以是:datetime.date.today() ,也可以是:datetime.datetime.now()
  172. 传入datetime时间,获取datetime时间当月第一天
  173. 返回传入的datetime时间的第一天的时间字符串
  174. """
  175. month_start = datetime.datetime(datetime_str.year, datetime_str.month, 1)
  176. return month_start.strftime('%Y-%m-%d')
  177. def get_month_end(datetime_str):
  178. """
  179. datetime_str可以是:datetime.date.today() ,也可以是:datetime.datetime.now()
  180. 传入datetime时间,获取datetime时间当月最后一天
  181. 返回传入的datetime时间的最后一天的时间字符串
  182. """
  183. if data_date.month == 12:
  184. month_end = datetime.datetime(datetime_str.year, 12, 31)
  185. else:
  186. month_end = datetime.datetime(datetime_str.year, datetime_str.month + 1, 1) - datetime.timedelta(days=1)
  187. return month_end.strftime('%Y-%m-%d')

python中的time模块的更多相关文章

  1. Python中的random模块,来自于Capricorn的实验室

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  2. Python中的logging模块

    http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...

  3. Python中的random模块

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  4. 浅析Python中的struct模块

    最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结. 了解c语言 ...

  5. python中的StringIO模块

    python中的StringIO模块 标签:python StringIO 此模块主要用于在内存缓冲区中读写数据.模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中.此类中的大部分 ...

  6. python中的select模块

    介绍: Python中的select模块专注于I/O多路复用,提供了select  poll  epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqu ...

  7. Python中的re模块--正则表达式

    Python中的re模块--正则表达式 使用match从字符串开头匹配 以匹配国内手机号为例,通常手机号为11位,以1开头.大概是这样13509094747,(这个号码是我随便写的,请不要拨打),我们 ...

  8. python中的shutil模块

    目录 python中的shutil模块 目录和文件操作 归档操作 python中的shutil模块 shutil模块对文件和文件集合提供了许多高级操作,特别是提供了支持文件复制和删除的函数. 目录和文 ...

  9. Python中使用operator模块实现对象的多级排序

    Python中使用operator模块实现对象的多级排序 今天碰到一个小的排序问题,需要按嵌套对象的多个属性来排序,于是发现了Python里的operator模块和sorted函数组合可以实现这个功能 ...

  10. 【转】浅析Python中的struct模块

    [转]浅析Python中的struct模块 最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概 ...

随机推荐

  1. 深入理解 react-router 路由系统

    作者:范洪春链接:https://zhuanlan.zhihu.com/p/20381597来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在 web 应用开发中,路由 ...

  2. 学习笔记 - 兼容ie的透明度问题

    .opacity{font-size: 14px;-khtml-opacity:0.6;-moz-opacity:0.6;filter:alpha(opacity=60);filter:"a ...

  3. 程序员听到bug后的N种反应,太形象了

    程序员的世界里,不止有代码,还有bug,bug,bug 当出现bug时,程序员们的反应是怎样的呢?

  4. 关于vue的使用计算属性VS使用计算方法的问题

    在vue中需要做一些计算时使用计算属性和调用methods方法都可以达到相同的效果,那么这两种使用方式的区别在哪里: <div id="example"> <p& ...

  5. timeit模块

    算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务.一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址 ...

  6. ZooKeeper 分布式共享锁的实现

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/8352919.html ------------------------------------ ...

  7. 如何查看dede版本信息

    dedecms版本信息 更新日期 it 分类: dedecms 打开 /include/common.inc.php 查找 $cfg_version 可以看到版本号 /打开 data/admin/ve ...

  8. nxlog4go 简介 - 基于log4go的下一代go语言日志系统

    nxlog4go的项目网址: https://github.com/ccpaging/nxlog4go 项目历史 ccpaging's log4go forked from https://githu ...

  9. xtrabackup全量备份和增(差)量备份

    xtrabackup全量备份和增(差)量备份 1.xtrabackup全量备份和恢复 1)备份: innobackupex --default-file=/PATH/TO/DEFAULT --host ...

  10. web前端学习(2):开始编写HTML

    在第一章中,我们初步了解了上网的过程,同时也明白了所谓网页,其本质就是主要用HTML语言所写的一份文档.相信大多数人在了解HTML文件前,最先接触的是利用"记事本"所写的文档或者是 ...