摘要:代码实例的时间的时间输出和相差的时长输出结果也就是说,多伦多和温哥华有个小时的时差小屌丝我去这么牛嘛小鱼这是开胃菜。代码实例为了显示直观,我直接用来运行这没有什么难度,在前面的代码中,也有展示。
小屌丝:有没有什么好的方式,让我的时间转换不那么费劲!
小鱼:开门见山的说,Python自带的datetime 模块和 time模块,不够你用?
小屌丝:转换的太费劲了。
小鱼:知道费劲,说明你的撸码有进步,不过,你这么一说,我确实想起来一个时间神器,一行代码就搞定。
小屌丝:这是真的吗?
小鱼:你可以不信,但是不能阻挡我的表演! !
话不多说,小鱼要开始表演了!!
今天来说的这个神器,就是pendulum,
对的,没看错,就是一个万能时间输出转换神器!
Pendulum 是一个 Python 包,用于简化日期时间操作;
它提供的类是原生类的替代品(它们继承自它们)。
我们先简单看个例子,如:我们要获取 多伦多和温哥华的时间差。
代码实例
#-*- coding: utf-8 -*-# @Time : 2021-10-08# @Author : Carl_DJimport pendulum#Toronto的时间dt_Toronto = pendulum.datetime(2021,10,8,tz = "America/Toronto")#Vancouver的时间dt_Vancouver = pendulum.datetime(2021,10,8,tz = "America/Vancouver")#输出Toronto 和Vancouver相差的时长print(dt_Toronto.diff(dt_Vancouver).in_hours())
输出结果 :
3
也就是说, 多伦多和温哥华 有3个小时的时差!
小屌丝:我去~~ pendulum 这么牛嘛???
小鱼:这是开胃菜。接着往下看!!
按照规矩,我们先安装!
当然,最直接的方式,就是pip install
pip install pendulum
安装完成就是这样的,截图如下:
当然,
如果不想每次都pip安装,直接看这两篇:
《Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!》
《Python3,我低调的只用一行代码,就导入Python所有库!》
代码实例:
#-*- coding: utf-8 -*-# @Time : 2021-10-09# @Author : Carl_DJimport pendulum#不指定任何时区dt_dt = pendulum.datetime(2021,10,9)#输出默认时区print(dt_dt.timezone.name)
运行结果:
UTC
如果不指定任何时区,那么输出的就是默认时区 即:UTC
使用local()自动将时区设置为本地时区。
类似于datetime()
但是,不同点:
local()会自动将时区转换本地时区;
类似于datetime() 并不会自动将时区转换为本地时区;
代码实例:
#-*- coding: utf-8 -*-# @Time : 2021-10-09# @Author : Carl_DJimport pendulum#使用local()讲时区设置为本地时区dt_loc = pendulum.local(2021,10,8)print(dt.timezone.name)
运行结果:
Asia/Shanghai
指定时区,输出的时区结果是:Asia/Shanghai
敲黑板,知识点:
切换时区很方便,只要调用时间对象的 in_timezone 传入参数 时区名称 就可以了:
缩写形式 in_tz 也可以被识别
代码实例:
#-*- coding: utf-8 -*-# @Time : 2021-10-09# @Author : Carl_DJimport pendulum#默认是上海时区dt_p = pendulum.now()#输出默认时区时间print(dt_p)#把时区设置为温哥华,并输出print(dt_p.in_timezone("America/Vancouver"))
输出结果:
#默认时区上海的时间2021-10-09T10:08:17.167020+08:00#温哥华的时间2021-10-08T19:08:17.167020-07:00
不同的时区,可以进行比较,运算等,我们来看下:
代码实例
#-*- coding: utf-8 -*-# @Time : 2021-10-09# @Author : Carl_DJimport pendulumdt_Toronto = pendulum.datetime(2021, 10, 8, 22, 33, 22, 0, tz="America/Toronto")dt_Vancouver = pendulum.datetime(2021, 10, 8, 19, 33, 22, 0, tz="America/Vancouver")print(f"打印多伦多时间:{dt_Toronto.to_datetime_string()}")print(f"打印多伦多时区:{dt_Toronto.timezone_name}")print(f"打印温哥华时间:{dt_Vancouver.to_datetime_string()}")print(f"打印温哥华时区:{dt_Vancouver.to_datetime_string()}")#比较两个时区的差值是否相等if dt_Toronto == dt_Vancouver: print(True)else: print(False)#给两个时区赋值dt_Vancouver = dt_Vancouver.on(2021,10,1).at(0,0,0)dt_Toronto = dt_Toronto.on(2021,10,1).at(0,0,0)#使用diff()比较两个时差的差值dif_time = dt_Vancouver.diff(dt_Toronto).in_hours()print(f"两个时区的时间差:{dif_time}")
输出结果:
打印多伦多时间:2021-10-08 22:33:22打印多伦多时区:America/Toronto打印温哥华时间:2021-10-08 19:33:22打印温哥华时区:America/VancouverTrue两个时区的时间差:3
敲黑板,知识点:
diff 方法用于与另一个时间对象比较,
in_hours 方法是时间区间的方法,可以将区间转化为小时,同理还有 in_days、in_years 等
时间运算包括比较、计算差异 和 增减。
比较很简单,对两个时间对象做比较就可以了,支持 ==、!=、>、>=、<、<=,比较的结果是 True 或 False。
代码实例:
为了显示直观,我直接用IDLE 来运行
#-*- coding: utf-8 -*-# @Time : 2021-10-09# @Author : Carl_DJimport pendulumdt_Toronto = pendulum.datetime(2021, 10, 8, 22, 33, 22, 0, tz="America/Toronto")dt_Vancouver = pendulum.datetime(2021, 10, 8, 19, 33, 22, 0, tz="America/Vancouver")>>> dt_Toronto = dt_Toronto.on(2021, 10, 1).at(0, 0, 0)>>> dt_Vancouver = dt_Vancouver.on(2021, 10, 1).at(0, 0, 0)>>> first == secondFalse>>> first != secondTrue>>> first > secondFalse>>> first >= secondFalse>>> first < secondTrue>>> first <= secondTrue
这没有什么难度, 在前面的代码中,也有展示。
import pendulumdt_Vancouver = pendulum.datetime(2021, 9, 30, 0)dt_Toronto = pendulum.datetime(2021, 10, 1, 0)print(f"温哥华和多伦多时间比较:{dt_Vancouver.diff(dt_Toronto)}")print(f"温哥华与默认时区时间比较:{dt_Vancouver.diff()}")
输出结果:
温哥华和多伦多时间比较:[2021-09-30T00:00:00+00:00 -> 2021-10-01T00:00:00+00:00]>温哥华与默认时区时间比较:[2021-09-30T00:00:00+00:00 -> 2021-10-09T03:48:39.418295+00:00]>
在2.3.4章节提到了,diff()比较差异的方法。
这里就不再赘述。
这里说一下,如果diff()不传参数,默认是与当前时区时间进行比较。
加减时间,这里使用的是add()和subtract()方法。
并且每个方法都返回一个新Datetime实例。
代码实例:
#-*- coding: utf-8 -*-# @Time : 2021-10-09# @Author : Carl_DJimport pendulum#设置当前时间戳dt_now = pendulum.datetime(2021, 10, 1)#打印dt_now的时间戳print(f"打印出当前的时间戳:{dt_now.to_datetime_string()}")#增加5年dt_now = dt_now.add(years=5)print(f"增加5年,显示时间戳:{dt_now.to_datetime_string()}")#减少3年,dt_now = dt_now.subtract(years=3)print(f"减少3年,显示时间戳:{dt_now.to_datetime_string()}")#增加4个月dt_now = dt_now.add(months=4)print(f"增加4个月,显示时间戳:{dt_now.to_datetime_string()}")#减少2个月dt_now = dt_now.subtract(months=2)print(f"减少2个月,显示时间戳:{dt_now.to_datetime_string()}")#增加1周dt_now = dt_now.add(weeks=1)print(f"增加1周,显示时间戳:{dt_now.to_datetime_string()}")#减少3周dt_now = dt_now.subtract(weeks=3)print(f"减少3周,显示时间戳:{dt_now.to_datetime_string()}")#增加9小时dt_now = dt_now.add(hours=9)print(f"增加9小时,显示时间戳:{dt_now.to_datetime_string()}")#减少6小时dt_now = dt_now.subtract(hours=3)print(f"减少6小时,显示时间戳:{dt_now.to_datetime_string()}")
输出结果:
打印出当前的时间戳:2021-10-01 00:00:00增加5年,显示时间戳:2026-10-01 00:00:00减少3年,显示时间戳:2023-10-01 00:00:00增加4个月,显示时间戳:2024-02-01 00:00:00减少2个月,显示时间戳:2023-12-01 00:00:00增加1周,显示时间戳:2023-12-08 00:00:00减少3周,显示时间戳:2023-11-17 00:00:00增加9小时,显示时间戳:2023-11-17 09:00:00减少6小时,显示时间戳:2023-11-17 06:00:00
敲黑板,知识点:
可以对时间进行调整,这个貌似很厉害的样子,
我们一起来看看。
#-*- coding: utf-8 -*-# @Time : 2021-10-09# @Author : Carl_DJimport pendulumdt_now = pendulum.datetime(2021, 10, 11,12,0,0)#输出当天开始时间print(f"当天的开始时间:{dt_now.start_of("day")}")#输出当天结束时间print(f"当天的结束时间:{dt_now.end_of("day")}")#输出当月开始时间print(f"当月的开始时间:{dt_now.start_of("month")}")#输出当天结束时间print(f"当月的结束时间:{dt_now.end_of("month")}")#输出21世纪开始时间print(f"21世纪的开始时间:{dt_now.start_of("century")}")#输出21世纪结束时间print(f"21世纪的结束时间:{dt_now.end_of("century")}")# dt_now.day_of_week == pendulum.SUNDAY#输出距离当前最近的下一个周三的日期print(f"下一个周三:{dt_now.next(pendulum.WEDNESDAY)}")#输出当前时间的本周周三的日期print(f"本周的周三:{dt_now.previous(pendulum.WEDNESDAY)}")dt_start = pendulum.datetime(2021, 10, 1)dt_end = pendulum.datetime(2021, 10, 31)#输出本月的中间日期print(f"本月的中间日期:{dt_start.average(dt_end)}")
敲黑板,知识点:
时间对象是一个复杂的对象,对于我们来说不方便看和读,就需要将起转化为字符串,或者将字符串表示的时间转化为时间对象。
Pendulum 提供和很多方便的方式:
代码实例:
#-*- coding: utf-8 -*-# @Time : 2021-10-09# @Author : Carl_DJimport pendulumdt = pendulum.datetime(1985, 9, 20, 13, 14, 15)print(f"输出当前时间:{dt}")#输出年月日print(f"输出年月日:{dt.to_date_string()}")#英文形式输出时间日期print(f"英文形式输出:{dt.to_formatted_date_string()}")#输出时间print(f"输出当前时间戳:{dt.to_time_string()}")#转化日期和时间print(f"输出转化后的日期和时间:{dt.to_datetime_string()}")print(f"输出当前格式时间:{dt.to_day_datetime_string()}")#格式化时间print(f"格式化时间后输出:{dt.format("ffffdd Do [of] MMMM YYYY HH:mm:ss A")}")
输出结果:
输出当前时间:1985-09-20T13:14:15+00:00输出年月日:1985-09-20英文形式输出:Sep 20, 1985输出当前时间戳:13:14:15输出转化后的日期和时间:1985-09-20 13:14:15输出当前格式时间:Fri, Sep 20, 1985 1:14 PM格式化时间后输出:Friday 20th of September 1985 13:14:15 PM
敲黑板,知识点:
字符串转换成时间, 使用 parse 方法就可以。
代码实例:
#-*- coding: utf-8 -*-# @Time : 2021-10-09# @Author : Carl_DJimport pendulumdt = pendulum.parse("1985-09-20T23:11:22")print(f"输出当前时间:{dt}")dt = pendulum.parse("1985-09-20T23:11:22", tz="America/Toronto")print(f"输出追加tz后的时间:{dt}")#添加strict=False,让pendulum尽可能的匹配我的想要的结果dt = pendulum.parse("31-01-01", strict=False)print(f"输出结果为:{dt}")dt = pendulum.parse("31/01/01", strict=False)print(f"输出结果为:{dt}")
输出结果:
输出当前时间:1985-09-20T23:11:22+00:00输出追加tz后的时间:1985-09-20T23:11:22-04:00看下效果2031-01-01T00:00:00+00:00看下效果2031-01-01T00:00:00+00:00
敲黑板,知识点:
小屌丝:为啥这个章节叫“人文关怀”,难道要给我们发福利 ??
小鱼:想啥呢~ ~
这个章节,主要介绍pendulum最最最,最Nice的功能:人性化时间
小屌丝:咋人性化了,我没看出来呢?
小鱼:别着急,往下看!
先代码展示:
#-*- coding: utf-8 -*-# @Time : 2021-10-09# @Author : Carl_DJimport pendulum#1天前dt_ago = pendulum.now().subtract(days=1).diff_for_humans()print(f"输出1天前:{dt_ago}")#1年后dt_after = pendulum.now().diff_for_humans(pendulum.now().subtract(years=1))print(f"输出1年后:{dt_after}")#1个月前dt = pendulum.datetime(2011, 8, 1)print(f"输出1个月前:{dt.diff_for_humans(dt.add(months=1))}")#5秒后dt_sec = pendulum.now().add(seconds=5).diff_for_humans()print(f"输出5 秒后:{dt_sec}")#3周前dt_wek = pendulum.now().subtract(days=24).diff_for_humans()print(f"输出3周前:{dt_wek}")#设定输出结果显示中文pendulum.set_locale("zh")#输出3周前,中文显示dt_wk = pendulum.now().subtract(days=24).
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/122204.html
摘要:中提供了一个和的模块可以用来做格式化日期和时间的。格式化日期通过模块中方法来格式化日期函数接收时间元组并返回以可读字符串表示薪资的时间格式的话由参数决定。每日宽度间隔为字符每行的长度为是每星期的行数。 我们可以通过学习在Python中对日期时间的处理,可以在快速的完成工作,比如: 将日期时间作为日志信息的内容输入 计算某一个功能的执行时间 用日期命名一个文件的名称 记录或者展示文件的...
摘要:模块实现从程序外部向程序传递参数。位置参数代表文件本身,运行方法参数,参数。。是正常退出,其他为异常第次第五次退出模块判断现在正在实用的平台,返回返回得到当前工作的目录。指定所有目录下所有的文件和目录名。例检验指定的对象是否存在。 sys模块 sys.argv: 实现从程序外部向程序传递参数。 位置参数argv[0]代表py文件本身,运行方法 python xx.py 参数1,参数2 ...
摘要:是回调函数,当链接服务器和相应数据传输完毕时触发本函数可选。仅仅是针对的,在中,已经没有这个模块了,取代它的是。由于以流式读取文件,从而速度较快,切少占用内存,但是操作上稍复杂,需要用户实现回调函数。 编写模块 模块是程序 模块就是一个扩展名为.py的Python程序。 编写模块 #!/usr/bin/env python # coding=utf-8 lang = python 引...
摘要:是否则检验指定的对象是否存在。由于的模块实现主要调用库,所以各个平台可能有所不同。时间格式时间戳的方式通常来说,时间戳是指格林威治时间年月日时分秒北京时间年月日时分秒起至现在的总秒数。元组方式元组共有个元素,返回的函数主要有,,。 os模块 os模块提供了多数操作系统的功能接口函数。当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,...
摘要:用了一段时间的开发项目,也是第一次用来开发项目,所有有许多相关的知识点需要总结,本文所介绍的的日期时间处理就是最近用到的,希望对各位有所帮助,也同时作为自己的笔记储存。提供了等模块用于处理日期和时间,较为常用的还是模块。 用了一段时间的django开发web项目,也是第一次用python来开发项目,所有有许多相关的知识点需要总结,本文所介绍的python的日期时间处理就是最近用到的,希...
阅读 2238·2021-10-11 10:59
阅读 2580·2021-10-11 10:58
阅读 3282·2021-09-08 09:35
阅读 3700·2021-09-02 15:21
阅读 1383·2019-08-30 15:53
阅读 2562·2019-08-29 14:16
阅读 2046·2019-08-26 14:00
阅读 2921·2019-08-26 13:52