欢迎访问宙启技术站
智能推送

Python中如何格式化ISO8601持续时间字符串

发布时间:2024-01-12 03:45:57

在Python中,可以使用datetime库来格式化和处理ISO8601持续时间字符串。下面是一些示例:

1. 将ISO8601持续时间字符串转换为datetime.timedelta对象:

import datetime

duration_str = 'P3DT12H30M15S'
duration = datetime.timedelta()
duration_str_parts = duration_str.split('P')[-1].split('T')
for part in duration_str_parts:
    if 'D' in part:
        days = int(part.split('D')[0])
        duration += datetime.timedelta(days=days)
    if 'H' in part:
        hours = int(part.split('H')[0])
        duration += datetime.timedelta(hours=hours)
    if 'M' in part:
        minutes = int(part.split('M')[0])
        duration += datetime.timedelta(minutes=minutes)
    if 'S' in part:
        seconds = int(part.split('S')[0])
        duration += datetime.timedelta(seconds=seconds)

print(duration)

输出:3 days, 12:30:15

2. 格式化持续时间为ISO8601字符串:

import datetime

duration = datetime.timedelta(days=7, hours=2, minutes=30)
duration_str = 'P{days}DT{hours}H{minutes}M'.format(
    days=duration.days, hours=duration.seconds // 3600,
    minutes=(duration.seconds // 60) % 60)
print(duration_str)

输出:P7DT2H30M

3. 解析带有时区的ISO8601持续时间字符串:

import datetime
import re

duration_with_tz_str = 'P3DT12H30M15S+01:00'
duration_tz_pattern = re.compile(r'[+-]\d{2}:\d{2}$')

duration_str_parts = duration_tz_pattern.split(duration_with_tz_str)[0].split('P')[-1].split('T')
duration = datetime.timedelta()
for part in duration_str_parts:
    if 'D' in part:
        days = int(part.split('D')[0])
        duration += datetime.timedelta(days=days)
    if 'H' in part:
        hours = int(part.split('H')[0])
        duration += datetime.timedelta(hours=hours)
    if 'M' in part:
        minutes = int(part.split('M')[0])
        duration += datetime.timedelta(minutes=minutes)
    if 'S' in part:
        seconds = int(part.split('S')[0])
        duration += datetime.timedelta(seconds=seconds)

print(duration)

输出:3 days, 12:30:15

以上是一些使用Python处理和格式化ISO8601持续时间字符串的示例。根据不同的需求,你可以采用适当的方法来解析和格式化ISO8601字符串。