time和datetime和tzinfo
time和datetime模块还有tzinfo (时区)(一直不明白两者的区别,然后摘了两片文章(最后面的两个链接),很清晰...)
一、time模块
常用函数
1. time()函数
time()函数返回的是时间戳(timestamp)。所谓时间戳指的是从1970年1月1日00:00:00开始按秒计算的偏移量。其他返回时间戳方式的函数还有clock()。
实例
>>>import time
>>>time.time()
1515117751.8810253
2. ctime()函数
ctime()函数可以将一个时间戳转化为字符串的形式,默认time.time()为参数。(convert time in seconds to string)
实例
>>>import time
>>>time.ctime()
'Fri Jan 5 10:21:29 2018'
>>>time.ctime(1500000000)
'Fri Jul 14 10:40:00 2017'
4.gmtime()函数
gmtime()用于获取UTC时间,UTC时间实际就是格林尼治时间,它与中国时间的时差为八个小时。
实例
>>>import time
>>>time.gmtime()
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=5, tm_hour=3, tm_min=27, tm_sec=18, tm_wday=4, tm_yday=5, tm_isdst=0)
5. localtime()函数
localtime()用于获取当前时区的当前时间。
实例
>>>import time
>>>time.localtime()
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=5,tm_hour=11, tm_min=28, tm_sec=48, tm_wday=4, tm_yday=5, tm_isdst=0)
6. strftime()函数
strftime()把一个代表时间的元组或者struct_time(如time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。
实例
>>> time.strftime("%Y-%m-%d %X")
'2018-01-05 11:20:21'
>>> time.strftime("%Y-%m-%d %H:%M:%S")
'2018-01-05 11:21:30'
>>> time.strftime("%Y-%m-%d %X", time.localtime())
'2018-01-05 11:23:04'
* format time格式化表示*
| 格式 | 含义 |
|---|---|
| %Y | 完整的年份 |
| %m | 月份(01 - 12) |
| %d | 一个月中的第几天(01 - 31) |
| %H | 一天中的第几个小时(24小时制,00 - 23) |
| %M | 分钟数(00 - 59) |
| %S | 秒(01 - 61) |
| %X | 本地相应时间 |
| %x | 本地相应日期 |
| %a | 本地(locale)简化星期名称 |
| %A | 本地完整星期名称 |
| %b | 本地简化月份名称 |
| %B | 本地完整月份名称 |
| %c | 本地相应的日期和时间表示 |
| %I | 第几个小时(12小时制,01 - 12) |
| %j | 一年中的第几天(001 - 366) |
| %p | 本地am或者pm的相应符 |
| %U | 一年中的星期数。(00 - 53星期天是一个星期的开始。) |
| %w | 一个星期中的第几天(0 - 6,0是星期天) |
| %W | 和%U基本相同,不同的是%W以星期一为一个星期的开始 |
| %y | 去掉世纪的年份(00 - 99) |
| %Z | 时区的名字(如果不存在为空字符) |
| %% | ‘%’字符 |
注:表中加粗部分为最常用格式
7. strptime()函数
strptime()把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作
实例
>>>import time
>>>time.strptime('2018-01-05 10:50:06','%Y-%m-%d %X')
time.struct_time(tm_year=2018,tm_mon=1,tm_mday=5,tm_hour=10,tm_min=50,tm_sec=6, tm_wday=4, tm_yday=5, tm_isdst=-1)
8. mktime()函数
mktime()可以将struct_time转换成用时间的浮点数表示
实例
>>> time.mktime(time.gmtime())
1515094387.0
>>> time.mktime(time.localtime())
1515123246.0
9. sleep()函数
线程推迟指定的时间运行,单位为秒。
import time
>>> time.sleep(3) #表示延迟3秒后程序继续运行
小结:
time模块中时间表现的格式主要有3种:
1. timestamp 时间戳
2. tuple或者struct_time 时间元组,共有九个元素组
3. formattime格式化字符串
它们之间的转化如图所示
二、datetime模块
datetime模块包含一个datetime类,通过from datetime import datetime导入的就是datetime这个类。
常见操作
1. 获取当前日期
>>> from datetime import datetime
>>> now = datetime.now()
>>> now
datetime.datetime(2018, 1, 5, 16, 2, 47, 929705)
>>> print(now)
2018-01-05 16:02:47.929705
2. 获取指定日期和时间
>>> from datetime import datetime
>>> dt=datetime(2018, 1, 1, 1, 1)
>>> print(dt)
2018-01-01 01:01:001
3. datetime类型转换为timestamp
只需要简单调用timestamp()方法
>>> from datetime import datetime
>>> dt=datetime(2018, 1, 1, 1, 1)
>>> dt.timestamp()
1514739660.0
4. timestamp转换为datetime
使用datetime提供的fromtimestamp()方法
>>> from datetime import datetime
>>> t = 1514739660.0
>>> print(datetime.fromtimestamp(t))
2018-01-01 01:01:00
5. str转换为datetime
当日期和时间为字符串时,需要把str转换为datetime,可通过datetime.strptime()实现。
>>> from datetime import datetime
>>> dt= datetime.strptime('2018-1-1 1:11:11', '%Y-%m-%d %H:%M:%S')
>>> print(dt)
2018-01-01 01:11:11
6. datetime转换为str
如果已经有了datetime对象,要把它格式化为字符串显示给用户,就需要转换为str,转换方法是通过strftime()实现的。
>>> from datetime import datetime
>>> now = datetime.now()
>>> now
datetime.datetime(2018, 1, 5, 16, 22, 50, 394736)
>>> now.strftime('%Y-%m-%d %H:%M:%S')
'2018-01-05 16:22:50'
7. datetime加减
对日期和时间进行加减需要导入timedelta这个类
>>> from datetime import datetime, timedelta
>>> now = datetime.now()
>>> now
datetime.datetime(2018, 1, 5, 16, 22, 50, 394736)
>>> now + timedelta(hours=10)
datetime.datetime(2018, 1, 6, 2, 22, 50, 394736)
>>> now - timedelta(days=10)
datetime.datetime(2017, 12, 26, 16, 22, 50, 394736)
>>> now + timedelta(days=10, hours=12)
datetime.datetime(2018, 1, 16, 4, 22, 50, 394736)
>>> (now + timedelta(days=10, hours=12)).total_seconds()
把timedelta转成时间戳
8.时区tzinfo
TypeError: can't compare offset-naive and offset-aware datetimes
# 这是因为两个时间不属于同一类型,offset-naive是不含时区的类型,而offset-aware是有时区类型,两者自然不能比较。 # 我们可以通过判断datetime对象的tzinfo属性,来获悉他是何种类型 import datetime import pytz now=datetime.datetime.now() # datetime.datetime(, , , , , , ) now.tzinfo==None #True
# 上述代码中now就是一个offset-naive型,就是一个不含时区的datetime。下面代码可以把它转换为一个含时区的offset-aware型:
now=now.replace(tzinfo=pytz.timezone('UTC')) # datetime.datetime(2016, 11, 13, 16, 23, 37, 488000, tzinfo=<UTC>)
# 同样的,将一个offset-aware型转换为offset-naive型:
now=now.replace(tzinfo=None)
小结
datetime模块定义了5个类:
| 序号 | 类 | 含义 |
|---|---|---|
| 1 | datetime.datetime | 表示日期时间的类 |
| 2 | datetime.timedelta | 表示时间间隔,即两个时间点的间隔 |
| 3 | datetime.date | 表示日期的类 |
| 4 | datetime.time | 表示时间的类 |
| 5 | datetime.tzinfo | 时区的相关信息 |
# 因为数据库都是有时区'UTC'的datetime类型,
# 所以先转换成无时区的类型now.replace(tzinfo=None))
# 然后datetime.timedelta().total_seconds()获取时间差,然后获取时间戳(数字 )
now = datetime.datetime.now()
minus_time = (now - token_obj.created.replace(tzinfo=None)).total_seconds()
本文参考如下:
- time模块官方文档
- datetime模块官方文档
- 廖雪峰的官方网站
- http://blog.csdn.net/you_are_my_dream/article/details/61616465
- http://blog.csdn.net/tigerking1017/article/details/51332220
- http://blog.csdn.net/cherdw/article/details/55224209
- https://www.cnblogs.com/cindy-cindy/p/6720196.html
- https://blog.csdn.net/python3_2017/article/details/78983370
- https://blog.csdn.net/qq_25420115/article/details/53149669
time和datetime和tzinfo的更多相关文章
- python time模块和datetime模块详解
一.time模块 time模块中时间表现的格式主要有三种: a.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b.struct_time时间元组,共 ...
- python time模块和datetime模块
一.time模块 time模块中时间表现的格式主要有三种: a.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b.struct_time时间元组,共 ...
- day21 Pythonpython time模块和datetime模块详解
一.time模块 time模块中时间表现的格式主要有三种: a.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b.struct_time时间元组,共 ...
- 【python】 time模块和datetime模块详解 【转】
一.time模块 time模块中时间表现的格式主要有三种: a.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b.struct_time时间元组,共 ...
- (转)python time模块和datetime模块详解
python time模块和datetime模块详解 原文:http://www.cnblogs.com/tkqasn/p/6001134.html 一.time模块 time模块中时间表现的格式主要 ...
- 【python】-- 模块、os、sys、time/datetime、random、logging、re
模块 模块,用一堆代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个 ...
- 练习十六:Python日期格式应用(datetime)
练习:关于python日期格式应用练习.用python方法如何输出指定格式形式的日期 这里用到datetime模块,datetime模块重新封装了time模块,提供了更多接口,提供的类包括:date, ...
- time模块和datetime模块详解
一.time模块 time模块中时间表现的格式主要有三种: a.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b.struct_time时间元组,共 ...
- python中datetime模块中datetime对象的使用方法
本文只讲述datetime模块中datetime对象的一些常用的方法,如果读者需要更多datetime模块的信息,请查阅此文档. datetime模块的对象有如下: timedelta date da ...
随机推荐
- 深度学习卷积网络中反卷积/转置卷积的理解 transposed conv/deconv
搞明白了卷积网络中所谓deconv到底是个什么东西后,不写下来怕又忘记,根据参考资料,加上我自己的理解,记录在这篇博客里. 先来规范表达 为了方便理解,本文出现的举例情况都是2D矩阵卷积,卷积输入和核 ...
- 【将门创投】AI 往期技术分享
计算机视觉 1. 嘉宾:商汤科技CEO 徐立 文章回顾:计算机视觉的完整链条,从成像到早期视觉再到识别理解 2. 嘉宾:格灵深瞳CTO 赵勇 文章回顾:计算机视觉在安防.交通.机器人.无人车等领域的应 ...
- Roslyn如何实现简单的代码提示
假如需要实现一个代码编辑器,其中一个很重要的功能是实现代码提示,类似VS的代码智能提示.下面用Roslyn编译器来实现一个简单的代码提示功能. 代码提示,首先必须需要知道对象的类型信息,然后通过迭代获 ...
- js快速排序算法
真正的快速排序算法一: function quickSort(array){ function sort(prev, numsize){ var nonius = prev; var j = nums ...
- rdesktop使用记录
常用命令 连接远程windows RDP服务器,映射本机/home/ssooking/share/目录到windows上,名称为Myshare. rdesktop -a 16 -u xxx -p xx ...
- Spring钩子方法和钩子接口的使用详解
本文转自:http://www.sohu.com/a/166804449_714863 前言 SpringFramework其实具有很高的扩展性,只是很少人喜欢挖掘那些扩展点,而且官方的Refrenc ...
- session多服务器共享的方案梳理
session的存储了解以前是怎么做的,搞清楚了来龙去脉,才会明白进行共享背后的思想和出发点.我喜欢按照这样的方式来问(或者去搞清楚):为什么要session要进行共享,不共享会什么问题呢? php中 ...
- Zookeeper系列六:服务器角色、序列化与通信协议、数据存储、zookeeper总结
一.服务器角色 1. Leader 1)事务请求的唯一调度者和处理者.保证事务处理的顺序性 事务请求:导致数据一致性的请求(数据发生改变).如删除一个节点.创建一个节点.设置节点数据,设置节点权限就是 ...
- Docker(一)Linux开启你的Docker之旅
前言 Docker容器最早受到RHEL完善的支持是从最近的CentOS 7.0开始的,官方说明是只能运行于64位架构平台, 内核版本为2.6.32-431及以上(即 >= CentOS 6.5, ...
- java中获取两个时间中的每一天
引入下面方法即可: /** * 获取两个时间中的每一天 * @param bigtimeStr 开始时间 yyyy-MM-dd * @param endTimeStr 结束时间 yyyy-MM-dd ...