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字符串。
