前言

我们使用time和datetime模块的主要目的是对时间戳、时间字符串、时间元组等时间的表述对象进行相互的转化。而我们平时编码涉及两个时间:一个是上海时间,也可以说是北京时间,一个是UTC时间,即世界协调时间;北京时间比UTC时间多了八个小时。

时间戳、时间字符串、时间元组

  • 时间戳:一般是float的形式;

  • 时间字符串:指的是一定格式描述时间的字符串。

%a  本地(locale)简化星期名称
%A  本地完整星期名称
%b  本地简化月份名称
%B  本地完整月份名称
%c  本地相应的日期和时间表示
%d  一个月中的第几天(01 - 31)
%H  一天中的第几个小时(24小时制,00 - 23)
%I  第几个小时(12小时制,01 - 12)
%j  一年中的第几天(001 - 366)
%m  月份(01 - 12)
%M  分钟数(00 - 59)
%p  本地am或者pm的相应符
%S  秒(01 - 61)
%U  一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
%w  一个星期中的第几天(0 - 6,0是星期天)
%W  和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x  本地相应日期
%X  本地相应时间
%y  去掉世纪的年份(00 - 99)
%Y  完整的年份
%Z  时区的名字(如果不存在为空字符)
%%  ‘%’字符%Y-%m-%d %H:%M:%S   # 年月日时分秒
  • 时间元组:共有九个元素,可以方便数学计算
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模块

time模块主要有以下的函数:

time():以秒为单位以float形式返回自从1970年1月1日开始计算的当前时间
clock():返回进程作为浮点数开始时的CPU时间
sleep():以浮点数形式延迟数秒,同步阻塞;
gmtime():将从Epoch开始的秒转换为UTC时间元组
localtime():将从Epoch开始的秒转换为本地时间元组
asctime():将时间元组转换为字符串
ctime():将时间转换为秒字符串
mktime():将本地时间元组转换为从Epoch开始的秒
strftime():根据格式规范将时间元组转换为字符串
strptime():根据格式规范将字符串解析为时间元组
  • 实例
import time# 时间戳,秒为单位,float
print(time.time())  # 1547106159.3509371# 在不同的系统上含义不同。
# 在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。
# 在WINDOWS中,第一次调用,返回的是进程运行的实际时间。
# 而第二次之后的调用是自第一次调用以后到现在的运行时间。
print(time.clock())# 进程休眠时间
print(time.sleep(1))# 将一个时间戳转换为UTC时区的元组时间。secs参数未提供,则以当前时间为准。
print(time.gmtime()) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=10, tm_hour=7, tm_min=50, tm_sec=27, tm_wday=3, tm_yday=10, tm_isdst=0)
print(time.gmtime(1234)) # time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=0, tm_min=20, tm_sec=34, tm_wday=3, tm_yday=1, tm_isdst=0)
#注意tm_wday指的是周几,这里是从0开始的,0代表周一# 将一个时间戳转换为本地时区的元组时间。secs参数未提供,则以当前时间为准。
print(time.localtime()) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=10, tm_hour=15, tm_min=55, tm_sec=17, tm_wday=3, tm_yday=10, tm_isdst=0)
print(time.localtime(1234)) # time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=20, tm_sec=34, tm_wday=3, tm_yday=1, tm_isdst=0)# 将一个时间元组转换成时间戳
print(time.mktime(time.localtime())) # 547107729.0
print(time.mktime((2019, 1,10,15,55,17,3,20,0))) # 1547106917.0# 将一个时间戳转换成时间字符串
print(time.ctime()) # Thu Jan 10 16:15:44 2019
print(time.ctime(time.time())) # Thu Jan 10 16:15:44 2019
print(time.ctime(1234)) # Thu Jan  1 08:20:34 1970# 将时间元组转换成时间字符串,没有参数就会默认time.localtime()
print(time.asctime(time.localtime())) # Thu Jan 10 16:13:13 2019
print(time.asctime((2019, 1,10,15,55,17,3,20,0))) # Thu Jan 10 15:55:17 2019# 将时间元组转化成某种格式的时间字符串
print(time.strftime("%Y-%m-%d %H:%M:%S")) # 2019-01-10 16:20:06
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 2019-01-10 16:20:06# 将某种格式的时间字符串转化成时间元组
print(time.strptime("2019-01-10 16:20:06", "%Y-%m-%d %H:%M:%S")) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=10, tm_hour=16, tm_min=20, tm_sec=6, tm_wday=3, tm_yday=10, tm_isdst=-1)# 将一个时间字符串转换成时间戳
print(time.mktime(time.strptime("2019-01-10 16:20:06", "%Y-%m-%d %H:%M:%S")))

datatime模块

datatime模块顾名思义针对的是日期,主要有5个类:

  • datetime.date:日期对象

  • datetime.datetime:日期时间对象

  • datetime.time:时间对象

  • datetime.timedelta:时间间隔对象

  • datetime.tzinfo:时区信息对象,这个对象很少使用

date对象

date对象主要有year,month,day三个属性,其支持加减,各种比较运算符。

import datetimedate = datetime.date(2019,1,3)
print(date.year)
print(date.month)
print(date.day)# 将时间戳转化成日期对象
d = datetime.date.fromtimestamp(123456)
# 输出今日的日期对象
d = datetime.date.today()
# 将日期对象转换为时间元组
print(d.timetuple()) # time.struct_time(tm_year=2019, tm_mon=1, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=11, tm_isdst=-1)
# 将一个日期对象替换,返回新的日期对象
print(d.replace(2019,5,2))  # 2019-05-02# 日期转时间字符串
print(d.ctime()) # Fri Jan 11 00:00:00 2019
# 日期转指定格式日期字符串
print(d.strftime("%Y %m %d"))  # 2019 01 11# 将日期标准化
dx = datetime.date(2019,5,2)
print(dx.isoformat()) # 标准化日期格式 2019-05-02
print(dx.isocalendar()) # 返回年数、周数、星期几 (2019, 18, 4)
print(dx.isoweekday()) # 返回星期几,周一为1,   4
print(dx.weekday()) # 返回星期几,周一为0       3# 支持加减和比较运算符
d1 = datetime.date(2019,1,3)
d2 = datetime.date(2018,10,21)
print(d1-d2) # 相差的天数
print(d1 + datetime.timedelta(days=3)) # 相加的另一个必须是时间间隔对象
print(d1 > d2) # True# 返回公历开始到现在的天数
x = datetime.date.today().toordinal()
print(x) # 737070
# 将公历开始到现在的天数转为日期对象
d = datetime.date.fromordinal(x)
print(d) # 2019-01-11

time时间对象

时间对象主要有小时、分钟、秒、微秒和tzinfo信息等属性。

import datetime
t = datetime.time(3,40,30,30)
print(t.hour) # 小时
print(t.minute) # 分钟
print(t.second) # 秒
print(t.microsecond) # 微秒
print(t.tzinfo)
# 表示的最大数值
print(t.max) # 23:59:59.999999
# 表示的最小数值
print(t.min) # 00:00:00# 支持比较运算符
t1 = datetime.time(2,30,30,40)
t2 = datetime.time(2,40,35,40)
print(t1 < t2) # True
print(t1 != t2) # True# 将时间对象转化iso格式
print(t1.isoformat()) # 02:30:30.000040
# 指定时间字符串格式
print(t1.strftime('%H:%M:%S')) # 02:30:30# 替换返回一个新的时间对象
print(t1.replace(12,42,30,1000))

datetime日期时间对象

datetime对象是date和time对象的合体,方法大多继承自date,主要属性有year, month, day, hour,minute, second, microsecond(微秒)。

import datetime
dt = datetime.datetime(2019,2,3,10,30,25,200)
print(dt) # 2019-02-03 10:30:25.000200# 属性
print(dt.year) # 2019
print(dt.month) # 2
print(dt.day) # 3
print(dt.hour) # 10
print(dt.minute) # 30
print(dt.second) # 25
print(dt.microsecond) # 200print(dt.time())
print(dt.date())
print(dt.timetuple()) # time.struct_time(tm_year=2019, tm_mon=2, tm_mday=3, tm_hour=10, tm_min=30, tm_sec=25, tm_wday=6, tm_yday=34, tm_isdst=-1)# 类方法
# 将时间戳转化成本地日期时间对象
print(datetime.datetime.fromtimestamp(123456))
# 将公历日期转换成日期时间对象
print(datetime.datetime.fromordinal(7777))
# 将时间戳转化成UTC日期时间对象
print(datetime.datetime.utcfromtimestamp(123456))
# 获取当前本地的时间
print(datetime.datetime.now())
# 获取当前utc时间
print(datetime.datetime.utcnow())
# 获取当前本地的时间
print(datetime.datetime.today())
# 将date对象和time对象联合成datetime对象
print(datetime.datetime.combine(datetime.date(2019,1,11), datetime.time(2))) # 2019-01-11 02:00:00

timedelta时间间隔对象

timedelta对象主要有day,hour,seconds, microseconds,milliseconds, minutes, weeks等7个属性。

import datetime
t = datetime.timedelta(days=1,seconds=30,microseconds=800,milliseconds=200,minutes=30,hours=21,weeks=2)
print(t) # 15 days, 21:30:30.200800print(t.min) # -999999999 days, 0:00:00
print(t.max) # 999999999 days, 23:59:59.999999
# weeks+days代表的总天数
print(t.days) # 15
# hours+minutes+seconds代表的总秒数
print(t.seconds)
# milliseconds+microseconds代表的总微秒数
print(t.microseconds)
# 总时间转换成秒数
print(t.total_seconds())# 支持加减乘除和比较运算符
t1 = datetime.timedelta(days=3)
t2 = datetime.timedelta(days=5)
print(t1+t2) # 8 days, 0:00:00
print(t1-t2) # -2 days, 0:00:00
print(t1/t2) # 1.6666666666666667
print(t1*3) # 9 days, 0:00:00
print(t1//t2) # 0

总结

  • time模块主要使用在时间戳、时间元组和时间字符串之间进行转换;

  • 时间元组struct_time是连接time模块和datatime模块的桥梁;

参考

  • https://blog.csdn.net/cmzsteven/article/details/64906245

  • https://docs.python.org/3/

转载于:https://www.cnblogs.com/cwp-bg/p/10197511.html

python模块分析之time和datetime模块相关推荐

  1. Python中calendar,time,datetime模块详情解 -------18

    常用模块 calendar time datetime os shutil zip math string 上述使用理论上都应该先导入,string是特例 calendar,time,datetime ...

  2. python报错:AttributeError:’datetime’模块没有属性’strptime’

    当尝试运行date函数时: launch_datetime = datetime.strptime(SoundingTime,"%Y-%m-%d %H:%M") 出现以下错误: A ...

  3. joi模块验证日期格式_python datetime模块详解

    一.datetime模块介绍 通过print(dir(datetime)),我们可以看到模块内属性和类: ['MAXYEAR', 'MINYEAR', '__builtins__', '__cache ...

  4. python自学时间-python基础学习时间time和datetime模块

    时间模块time和datetime() 时间表现为三种格式 1.时间戳 2.时间元组 3.格式化字符串(2017-11-1) 时间戳:通常来说时间戳表示的是从格林威治1970年1月1日00:00:00 ...

  5. python比较日期大小_Python日期的处理——datetime模块

    本文作者:胡   婧 文字编辑:杨慧琳 技术总编:张学人 好消息!!!爬虫俱乐部将于2019年7月5日至7月8日在武汉举行首期Python编程技术定制培训.本次培训采用理论与案例相结合的方式,旨在帮助 ...

  6. 【Python】8000字:Python时间系列之datetime模块

    公众号:尤而小屋 作者:Peter 编辑:Peter 大家好,我是Peter~ 在上篇Python或Pandas时间序列的文章中Peter详细介绍了time模块,本文中重点介绍的是datetime模块 ...

  7. 手机上python编程工具3和3h有区别吗_Python3.5内置模块之time与datetime模块用法实例分析...

    本文实例讲述了Python3.5内置模块之time与datetime模块用法.分享给大家供大家参考,具体如下: 1.模块的分类 a.标准库(Python自带):sys.os模块 b.开源模块(第三方模 ...

  8. python的datetime模块用法_Python3.5内置模块之time与datetime模块用法实例分析

    本文实例讲述了python3.5内置模块之time与datetime模块用法.分享给大家供大家参考,具体如下: 1.模块的分类 a.标准库(python自带):sys.os模块 b.开源模块(第三方模 ...

  9. python模块datetime_Python3.5内置模块之time与datetime模块用法实例分析

    本文实例讲述了Python3.5内置模块之time与datetime模块用法.分享给大家供大家参考,具体如下: 1.模块的分类 a.标准库(Python自带):sys.os模块 b.开源模块(第三方模 ...

  10. Python之路(第十六篇)xml模块、datetime模块

    一.xml模块 xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单, xml比较早,早期许多软件都是用xml,至今很多传统公司如金融行业的很多系统的接口还主要 ...

最新文章

  1. python多大储存空间不足怎么办_Python存储空间不足
  2. Python知识点5——字典
  3. Ruby用SciTE输出中文报错问题解决
  4. windows mobile 鼠标等待
  5. UA OPTI570 量子力学 公式与结论总结1 角动量基础
  6. F#基础教程 大纲
  7. 2021高通AI应用创新大赛-创新赛道-垃圾分类识别 第三次会议研讨
  8. 去除Win10资源管理器中快速访问的“最近使用的文件”和“常用文件夹”
  9. 水位传感器的python代码_关于水的作文
  10. 递归:合并两个有序链表
  11. Exploit编写教程1:栈溢出
  12. appcan 文件下载到根目录(pdf)
  13. iOS 苹果开发者账号协议和付费条款同意过程
  14. 计算机xp上网运行很慢,如何解决WinXP打开我的电脑很慢的问题?
  15. MapGuide的系统架构
  16. 年收入10万的家庭怎么买保险最划算?
  17. 验证码可以说是爬虫中比较麻烦的技术了!今天教你搞定滑块验证码!
  18. 树莓派4B开机自启动Python程序,发送WIFI-IP至指定邮箱
  19. LZW 编解码算法实现与分析
  20. 2021年煤气考试题库及煤气考试内容

热门文章

  1. [推荐算法]基于用户的协同过滤算法
  2. LRC软件测试简历,C语言 LRC歌词文件解析
  3. 设某链表中最常用的操作是在链表的尾部_面试官:“双向链表”都不会,谁给你跳槽的勇气?...
  4. DevOps使用教程 华为云(15)git如何将本地项目初始化为远程仓库
  5. java并发编程(8)-- 线程 阻塞队列 生产者消费者 lock synchronized
  6. relative定位下要使用top、left,而不是margin-top、margin-left
  7. linux两个树莓派通信,Arduino与树莓派间的通信实践
  8. MyBatisPlus学习
  9. 计算机网络技术基础试卷2,《计算机网络基础考试2》试题与答案
  10. Hibernate.cfg.xml 整理