Python处理ISO 8601日期时间



一、ISO 8601日期时间

1. 简介

国际标准ISO 8601,是国际标准化组织的日期和时间的表示方法,全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》

2. 格式

  • ISO 8601日期格式

    YYYY-MM-DDThh:mm:ss[.mmm]TZD

    各字段含义如下:

    字段含义
    YYYY表示四位数的年份
    MM表示两位数的月份
    DD表示两位数的天(day of the month),从01到31
    T是用来指示时间元素的开始字符
    hh表示两位数的小时,从00到23,不包括AM/PM
    mm表示两位数的分钟,从00到59
    ss表示两位数的秒,从00到59
    mmm表示三位数的毫秒数,从000到999
    TZD表示时区指示符:Z或+hh:mm或-hh:mm,+或-表示时区距离UTC(世界标准时间)时区多远。
    例如:CST(中国标准时间):UTC +08:00,EST(东部标准时间):UTC -05:00,CST(中部标准时间):UTC -06:00
  • 样例
    2022-07-24T00:14:01.954+08:00:表示世界标准时间UTC为2022年07月24日00点14分01秒954毫秒,当前地区所在时区距离UTC标准时提前08时00分

3. 时区划分

  • 世界时区图
    请添加图片描述
    地球上共有360度经度,按照15度一个时区,将全球分为24个时区。以0度经线开始计算,往东方向,依次分为东一区、东二区、东三区…东十二区;往西方向,依次为西一区、西二区、西三区…西十二区。其中西十二区和东十二区共占一个时区,成为东西十二区。其中,中时区即世界标准时间UTC,向东每经过一个时区,+1小时,向西每经过一个 时区,-1小时。例如首都北京处于东八区,那么就+8小时,即2022-07-24T00:14:01.954+08:00中的+08:00

二、Python处理ISO 8601日期时间

1. 将 ISO 8601 转化为 UTC 标准日期时间 / 本地时间

  • 截取UTC 标准日期时间
    2022-07-24T00:14:01.954+08:00 —> 2022-07-24 00:14:01
import time

t0 = '2022-07-24T00:14:01.954+08:00'

format1 = "%Y-%m-%dT%H:%M:%S.%f+08:00"
t1 = time.strptime(t0, format1)  # time.struct_time(tm_year=2022, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=14, tm_sec=1, tm_wday=6, tm_yday=205, tm_isdst=-1)

format2 = "%Y-%m-%d %H:%M:%S"
t2 = time.strftime(format2, t1)  # 2022-07-24 00:14:01
  • 转化为本地日期时间
    2022-07-24T00:14:01.954+08:00 —> 2022-07-24 08:14:01
import dateutil.parser
from datetime import timezone

# 将字符串时间 转化为 datetime 对象
dateObject = dateutil.parser.isoparse('2022-07-24T00:14:01.954+08:00')  # 2022-07-24 00:14:01.954000+08:00
# 根据时区 转化为 datetime 数据
localdt = dateObject.replace(tzinfo=timezone.utc).astimezone(tz=None)  # 2022-07-24 08:14:01.954000+08:00
# 产生本地格式 字符串
localtime = localdt.strftime('%Y-%m-%d %H:%M:%S')  # 2022-07-24 08:14:01

2. 两个 ISO 8601 日期时间的差值

2022-07-24T00:14:02.954+08:00 - 2022-07-24T00:14:01.954+08:00 = 01s

from datetime import datetime

format = "%Y-%m-%dT%H:%M:%S.%f+08:00"

t0 = '2022-07-24T00:14:01.954+08:00'
t1 = '2022-07-24T00:14:02.954+08:00'

s0 = datetime.strptime(t0, format)
s1 = datetime.strptime(t1, format)

sub = (s1 - s0).seconds  # 1

3. 时间戳转ISO 8601日期时间

2022-07-24 01:40:02.867706 —>2022-07-23T17:40:02.867706+08:00

import time
import datetime

# datetime时间戳
t0 = datetime.datetime.now()  # 2022-07-24 01:40:02.867706

# ISO 8601本地
t1 = datetime.datetime.now().isoformat()  # 2022-07-24T01:40:02.867706

# UTC至ISO 8601
t2 = datetime.datetime.utcnow().isoformat()  # 2022-07-23T17:40:02.867706

# 本地到ISO 8601没有微秒
t3 = datetime.datetime.now().replace(microsecond=0).isoformat()  # 2022-07-24T01:40:02

# 带有TimeZone信息的UTC到ISO 8601
t4 = datetime.datetime.utcnow().replace(tzinfo=datetime.timezone.utc).isoformat()  # 2022-07-23T17:40:02.867706+00:00

# 带有TimeZone信息的本地ISO 8601
utc_offset_sec = time.altzone if time.localtime().tm_isdst else time.timezone
utc_offset = datetime.timedelta(seconds=-utc_offset_sec)
t5 = datetime.datetime.now().replace(tzinfo=datetime.timezone(offset=utc_offset)).isoformat()  # 2022-07-24T01:40:02.867706+08:00

参考

ISO 8601日期格式与持续时间格式
世界时区
地理小常识:时区的计算
python 时间戳转iso 8601_Python中的ISO时间(ISO 8601)
python中时间转换
python-ISO格式 转化为 本地时间

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ISO 8601是一种国际标准,用于表示日期时间。在Python中,可以使用datetime模块来处理日期时间,并将其格式化为ISO 8601格式。具体步骤如下: 1. 首先,导入datetime模块: ``` import datetime ``` 2. 使用datetime模块的now()函数获取当前日期时间: ``` current_time = datetime.datetime.now() ``` 3. 将日期时间格式化为ISO 8601格式,可以使用strftime()函数,并指定格式化字符串"%Y-%m-%dT%H:%M:%S": ``` iso_8601_time = current_time.strftime("%Y-%m-%dT%H:%M:%S") ``` 其中,"%Y"表示四位数的年份,"%m"表示两位数的月份,"%d"表示两位数的日期,"T"表示时间日期的分隔符,"%H"表示小时(24小时制),"%M"表示分钟,"%S"表示秒。 最后,iso_8601_time就是符合ISO 8601格式的时间字符串。例如,2022年10月10日15时30分30秒的ISO 8601时间格式为"2022-10-10T15:30:30"。 引用中的示例结果字典中的"time"字段,可以替换为上述生成的ISO 8601格式的时间字符串。这样,就可以将时间ISO 8601格式存储在字典中了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [使用Python开发iOS程序](https://blog.csdn.net/weixin_42357256/article/details/113662017)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [python使用yaml格式文件](https://blog.csdn.net/qq_44659804/article/details/127351957)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值