time
和datetime
是python处理时间的两个库,作用差不多
据说datetime
的功能比time
完善,为了保持一致,尽量都用datetime
所以time
在我看来唯一的用处就是获取时间戳了
注意datetime
里面还有个模块叫datetime
,很恶心人,导入的时候小心点
import datetime
当前时间(精确到秒)
t = datetime.datetime.now() # 2017-12-12 19:10:19.580580
当前日期(精确到天)
t = datetime.date.today() # 2017-12-12
当前时间戳
datetime
好像不能直接得到时间戳,所以先拿到当前时间,再转成时间戳
t = datetime.datetime.now()
stamp = t.timestamp() # 1513077019.58058
或者通过time
直接获取时间戳
import time
t = time.time() # 1513077019.580655
应用
因为工作上的需要,要拿到一个日期(天)的第二天早上六点的时间,我是这么做的
先拿到零点的时间
t = datetime.date.today() # 2017-12-12
t = datetime.datetime.strftime(t, "%Y-%M-%d %H:%M:%S") # 2017-12-12 00:00:00
上面拿到的是字符串,需要转成datetime
类型才能进行时间上的加减和比较
t = datetime.datetime.strptime(t, "%Y-%m-%d %H:%M:%S") # 2017-12-12 00:00:00
加六个小时,也可以加days
、minutes
、weeks
等等
t = t + datetime.timedelta(hours=6) # 2017-12-12 06:00:00
这样就拿到我想要的东西了,干什么用呢
第一个日期是用户已经登录过的日期,算出这个日期第二天早上六点的时间
只要用户在那个时间之前登录,都算已经登录过了,不做处理
在那个时间之后的第一次登录,就算新的一天的登录,做处理,并重置登录日期为今天
注意datetime
类型的时间,是可以直接做比较的
t1 = 2017-12-12 19:00:00
t2 = 2017-12-12 20:00:00
t1 < t2 # True
在重置登录日期的时候,又遇到一个问题
如果在零点到六点之间重置,因为过了零点,日期算第二天了
但过了六点之后应该还要重置一次,判断条件已经达不到了
所以再做一个判断,是在零点和六点之间重置,日期就往回退一天
t = datetime.datetime.now()
h = t.hour
if h > 6:
t = datetime.date.today()
else:
t = datetime.date.today() - datetime.timedelta(days=1)
参考
网上的资料一片混乱,这篇是我看过写得最清楚的
https://zhuanlan.zhihu.com/p/23679915
这篇讲了time
和datetime
的区别与联系
http://gracece.com/2014/10/the-distinction-between-date-and-datetime-in-python/
再收藏一篇
http://www.wklken.me/posts/2015/03/03/python-base-datetime.html#1-huo-qu-dang-qian-datetime