ISO8601 Duration
:label:python, ISO8601 duration
问题:对于形如YYYYMMDDTHHMMSS的给定参考时间(ref->str),和相应的时间间隔(duration->str)形如P0Y0M0DT0H30M0S,需要得到ref+duration的结果。
可以采用isoduration库来解决相应问题。datetime类型数据可以和Duration类数据直接加减,将ref字符串转化为datetime类型然后将duration字符串转化为Duration对象,最后再加减即可。
参考:
1
| %pip install isoduration
|
1 2 3 4 5 6 7 8 9 10 11
| from isoduration import parse_duration from datetime import datetime
def refAddDuration(ref:str, duration:str)->str: """处理ref time和duration相加情况 tgt=ref time + duration """ ref=datetime.strptime(ref, "%Y%m%dT%H%M%S") duration=parse_duration(duration) ref=ref+duration return ref.strftime("%Y%m%dT%H%M%S")
|
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| In [1]: from isoduration import parse_duration ...: from datetime import datetime ...: ...: def refAddDuration(ref:str, duration:str)->str: ...: """处理ref time和duration相加情况 ...: tgt=ref time + duration ...: """ ...: ref=datetime.strptime(ref, "%Y%m%dT%H%M%S") ...: duration=parse_duration(duration) ...: ref=ref+duration ...: return ref.strftime("%Y%m%dT%H%M%S") ...:
In [2]: ref="20231201T123059" ...: duration="P0Y2M3DT13H0M0S" ...: print(refAddDuration(ref=ref, duration=duration)) 20240205T013059
|
处理结果如上,值得注意的是duration指定的时间间隔不是一段绝对时间,比如1月1日开始的1个月和2月1日开始的1个月,时间间隔是不同的,如果自己手搓需要注意。
以上内容仅供参考,isoduration 的使用以官方文档为准。