utc时间转换为时间戳 golang_【Python技术入门10】Python日期和时间操作

在Python开发工作中,经常用到日期和时间的操作。比如:带日期时间信息的日志信息的输出,耗时性能分析定位,日期格式和字符串格式相互转换等操作。Python为我们提供了time模块和datetime模块,进行这些场景下的日期和时间的处理操作。

为什么说时间操作的知识点了,因为飞哥想起来自己当初还是新人的时候,从日志中读取时间戳字段,再把时间戳字段转换为时间对象时,用了time.gmtime转换为时间对象。感觉挺简单的一个任务,给搞砸了,导致最终写入数据库的时间总是少8个小时。最后经过另一个开发小伙伴的协助,发现是时区导致的问题,正确的转换方法是用time.localtime转换。总之,是飞哥当时对世界标准时间本地时间的区别没有一个清晰的概念认知导致的。犯了这种极其简单的问题导致的bug,还被上司骂了一顿,当月的奖金都没了。

接下来,飞哥带领小伙伴,主要学习time模块下的日期和时间的相关操作知识。学习完后,小伙伴对世界标准时间、本地时间、时间戳及其相关的操作函数会有个全新的理解,以后再也不用担心代码出bug了。

01 相关术语和惯例的解释

1、UTC time(UniversalTime Coordinated,世界协调时间),又称世界统一时间、世界标准时间、国际协调时间。由于英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称UTC

UTC time对应的各个时区的本地时间(Local Time),它们之间的关系是:UTC +时区差=本地时间

时区分为东时区西时区。时区差,东时区为正,西时区为负。因此,东N区的时间比UTC时间早N个小时,UTC time+ N小时即为东N区的本地时间;而西N区时间比UTC时间晚N个小时,UTC time- N小时 即为西N区的本地时间。

中国在东8区,因此,比UTC时间早8小时,所以用 UTC+8表示。 2、 Epoch Time 表示 时间计时开始的起点是一个约定的特定的一个时间点,也就是 世界标准时间1970年1月1日0时0分。不同平台上这个时间点的值可能不相同,对于Unix,EpochTime是1970年1月1日00:00:00(UTC)。要查看特定平台上的Epoch Time,可以使用time模块的time.gmtime(0)来获取 。 3、 timestamp(时间戳) 它是一种时间表示方式,表示从 Epoch Time(也就是世界标准时间1970年1月1日0时0分) 开始到现在时间点所经过的时间值。在 Python中,它表示 从Epoch Time开始到现在时间点所经过的秒数的时间值,其值为float类型。 02 导入模块

时间的3种表示方式:时间对象,时间字符串,时间戳。该模块提供了各种时间相关的函数,可以很方便的进行上述时间表示方式的获取和相互转换。

先导入time模块,才能使用模块中的各种方法。

>>> import time>>> 
03 时间戳

1、time.time() 

功能:返回以浮点数表示从 epoch 开始的秒数的时间值。 

>>> time.time()1606207662.159632>>> 

2、time.time_ns() 

功能:与time() 相似,但返回时间为用整数表示epoch 以来所经过的纳秒数。 

>>> time.time_ns()1606207902102841100>>> 
04 time时间对象

time模块的时间对象类型是time.struct_time类型,它是一个带有命名元组接口的对象:可以通过索引和属性名访问值。具体的属性名和索引如下图所示:

8548ee73e37450e2aa6642cc35c1a2ab.png

1、time.localtime([secs])

功能:返回以指定时间戳(secs)对应的本地时间的 struct_time对象。

参数:secs用于指定以秒为单位的时间戳,是可选参数。如果未提供 secs 或为 None ,则函数内部会使用 time.time() 所返回的当前时间戳

>>> time.localtime() #返回表示当前时间的时间对象time.struct_time(tm_year=2020, tm_mon=11, tm_mday=24, tm_hour=17, tm_min=14, tm_sec=49, tm_wday=1, tm_yday=329, tm_isdst=0)>>> time.localtime(time.time()+30*60) #返回表示当前时间推后30分钟的时间对象time.struct_time(tm_year=2020, tm_mon=11, tm_mday=24, tm_hour=17, tm_min=45, tm_sec=18, tm_wday=1, tm_yday=329, tm_isdst=0)>>> t1 = time.localtime() #把时间对象赋值给t1>>> t1[0] #获取年份2020>>> t1.tm_year #通过属性名称获取年份2020>>> t1[5] #获取秒34>>> t1.tm_sec #通过属性名称获取秒34>>> 

2、time.gmtime([secs])

功能:与time.localtime()的功能类似。返回以指定时间戳(secs)对应的世界标准时间(UTC)的 struct_time对象。

参数:与time.localtimesecs参数一样

>>> def test():    print("本地时间:", time.localtime())    print("世界标准时间:", time.gmtime())    >>> test()本地时间:time.struct_time(tm_year=2020, tm_mon=11, tm_mday=24, tm_hour=17, tm_min=29, tm_sec=13, tm_wday=1, tm_yday=329, tm_isdst=0)世界标准时间:time.struct_time(tm_year=2020, tm_mon=11, tm_mday=24, tm_hour=9, tm_min=29, tm_sec=13, tm_wday=1, tm_yday=329, tm_isdst=0)>>> 

注意:飞哥在上面的例子中,同时输出了以时间对象表示的本地时间和世界标准时间(UTC),细心的小伙伴可以发现2者的tm_hour相差8个小时。通过前面第一节的《相关术语和惯例的解释》的学习,应该知道为什么。

05 时间对象的字符串格式化

大部分开发情况下,需要把时间输出给运维人员或自己调试看,这时候就需要对时间对象进行格式化输出。

1、time.strftime(format[, t])

功能:将时间对象(struct_time)类型的时间转换为format参数指定格式的时间字符串。

参数:fortmat 用于指定格式化字符串t 用于指定要被格式化的时间对象,可选参数。如果未提供 t ,则函数内部会使用 time.localtime() 所返回的当前本地时间。

>>> time.strftime("%Y-%m-%d %H:%M:%S")  # 格式化成2020-11-11 00:00:00形式'2020-11-24 17:56:34'>>> time.strftime("%a %b %d %H:%M:%S %Y") # 格式化成Wed Nov 11 00:00:00 2020形式'Tue Nov 24 18:01:09 2020'>>> time.strftime("时间:%Y年%m月%d日 %H时%M分%S秒") # 格式化成自己想要的任何格式'时间:2020年11月24日 18时02分32秒'>>> 

格式化字符串format 使用%x占位符,指定从时间对象中提取哪些时间字段信息,除了%x占位符以外的其它字符串,开发者可以自由输入(比如上面第3个时间格式化例子)。支持的%x占位符指令如下图所示:

a7939d3ba762e1056391355a3cc188fd.png

06 时间表示之间的相互转换 1、time. strptime(string[, format]) 功能:根据format的时间格式化字符串把一个时间字符串解析为struct_time类型的时间对象。 时间字符串参数必须与格式化参数匹配,如果 string不能根据format 解析,或者解析后它有多余的数据,则引发 ValueError异常 。 参数:string被解析的时间字符串; format参数与 strftime()中的相同,为可选参数,如果未提供format参数,则函数内部默认为"%a %b %d %H:%M:%S %Y"。 2、time. mktime(t) 功能:将struct_time类型的时间对象转换为时间戳(浮点值,该时间点以秒为单位表示。) 参数:t表示truct_time类型的时间对象。接下来,飞哥给小伙伴展示一下时间对象、时间字符串和时间戳之间相互转换的例子:
>>> import time>>> strt1 = time.strftime("%Y-%m-%d %H:%M:%S")  # 当前本地时间格式化为2020-11-11 00:00:00的格式>>> print(strt1)2020-11-24 19:39:22>>> time1 = time.strptime(strt1,"%Y-%m-%d %H:%M:%S") #时间字符串转为时间对象>>> print(time1)time.struct_time(tm_year=2020, tm_mon=11, tm_mday=24, tm_hour=19, tm_min=39, tm_sec=22, tm_wday=1, tm_yday=329, tm_isdst=-1)>>> ts1 = time.mktime(time1) #时间对象转为时间戳>>> print(ts1)1606217962.0>>> time2 = time.localtime(ts1) #时间戳转为时间对象>>> print(time2)time.struct_time(tm_year=2020, tm_mon=11, tm_mday=24, tm_hour=19, tm_min=39, tm_sec=22, tm_wday=1, tm_yday=329, tm_isdst=0)>>> 

小伙伴们,3种时间表示方式之间的相互转换是不是很简单,只要掌握了2.2到2.3节中的这几个函数,遇到时间处理相关的任务,再也难不倒你了。

更多Python精彩文章、新手学习干货,欢迎一起交流学习!

END 742d5662b2b0e92c09f38c5c5716e4a2.gif 扫码关注我们 309598ea0e8f578010a35f73e6dee268.png 专业提供 定制学习计划和职业规划服务 公众号:Python编程研习社 742d5662b2b0e92c09f38c5c5716e4a2.gif
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值