python 时间戳转iso 8601_ISO8601时间字符串到时间戳处理

作者:matrix

被围观: 5,157 次

发布时间:2019-06-21

无评论 »

💡NOTICE:这是一个创建于 536 天前的主题,其中的信息可能已经有所发展或是发生改变。

之前不太理解ISO8601时间格式,后来看了下网上文章,其实是没有固定的单一格式。

按照下面这些其实都属于ISO8601时间格式:

2019-03-25T16:00:00.000111Z

2019-03-25T16:00:00.111Z

2019-03-25T16:00:00Z

2019-03-25T16:00:00

...

Z表示祖鲁时间Zulu time 即+0时区,若去掉不写Z则采用系统本地时区。

ISO8601时间还有很多其他扩展格式。

下面代码处理的也就是普通格式

python

import datetime,pytz

def iso2timestamp(datestring, format='%Y-%m-%dT%H:%M:%S.%fZ',timespec='seconds'):

"""

ISO8601时间转换为时间戳

:param datestring:iso时间字符串 2019-03-25T16:00:00.000Z,2019-03-25T16:00:00.000111Z

:param format:%Y-%m-%dT%H:%M:%S.%fZ;其中%f 表示毫秒或者微秒

:param timespec:返回时间戳最小单位 seconds 秒,milliseconds 毫秒,microseconds 微秒

:return:时间戳 默认单位秒

"""

tz = pytz.timezone('Asia/Shanghai')

utc_time = datetime.datetime.strptime(datestring, format) # 将字符串读取为 时间 class datetime.datetime

time = utc_time.replace(tzinfo=pytz.utc).astimezone(tz)

times = {

'seconds': int(time.timestamp()),

'milliseconds': round(time.timestamp() * 1000),

'microseconds': round(time.timestamp() * 1000 * 1000),

}

return times[timespec]

def timestamp2iso(timestamp, format='%Y-%m-%dT%H:%M:%S.%fZ'):

"""

时间戳转换到ISO8601标准时间(支持微秒级输出 YYYY-MM-DD HH:MM:SS.mmmmmm)

:param timestamp:时间戳,支持 秒,毫秒,微秒级别

:param format:输出的时间格式 默认 iso=%Y-%m-%dT%H:%M:%S.%fZ;其中%f表示微秒6位长度

此函数特殊处理,毫秒/微秒部分 让其支持该部分的字符格式输出

:return:

"""

format = format.replace('%f','{-FF-}')#订单处理微秒数据 %f

length = min(16, len(str(timestamp)))#最多去到微秒级

#获取毫秒/微秒 数据

sec = '0'

if length != 10:#非秒级

sec = str(timestamp)[:16][-(length - 10):]#最长截取16位长度 再取最后毫秒/微秒数据

sec = '{:0<6}'.format(sec)#长度位6,靠左剩下的用0补齐

timestamp = float(str(timestamp)[:10])#转换为秒级时间戳

return datetime.datetime.utcfromtimestamp(timestamp).strftime(format).replace('{-FF-}',sec)

说明:

之前别个写的iso到时间戳的转换方法简直蛋疼,无参数说明和无法精确到秒级别。

两个函数都可以相互转换和处理。

参考:

https://en.wikipedia.org/wiki/ISO_8601

https://docs.Python.org/zh-cn/3.7/library/datetime.html?highlight=isoformat#strftime-strptime-behavior

https://www.w3.org/TR/NOTE-datetime

https://www.cryptosys.net/pki/manpki/pki_iso8601datetime.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值