使用Python将时间或者时间间隔转为ISO 8601格式

淡淡的烟草味﹌ 2022-07-13 15:12 269阅读 0赞

Python自带的datetime库提供了将datetime转为ISO 8610格式的函数,但是对于时间间隔(inteval)并没有提供转换的函数,下面我们动手写一个。
对于时间间隔,ISO 8601的表示形式如下:
ISO 8601

P表示的是时间间隔的前缀。YMDHMS分别表示年月日时分秒,W表示周。T表示后面的字符是精确到天的,也就是以小时表示开始的前缀。
英文解释如下 :
[P] is used as time-interval (period) designator, preceding a data element which represents a given duration of a time-interval;
The character [T] shall be used as time designator to indicate the start of the representation of time of the day in date and time expressions.

下面是实现代码:

  1. # -*- encoding: utf-8 -*-
  2. import datetime
  3. def isoformat(time):
  4. ''' 将datetime或者timedelta对象转换成ISO 8601时间标准格式字符串 :param time: 给定datetime或者timedelta :return: 根据ISO 8601时间标准格式进行输出 '''
  5. if isinstance(time, datetime.datetime): # 如果输入是datetime
  6. return time.isoformat();
  7. elif isinstance(time, datetime.timedelta): # 如果输入时timedelta,计算其代表的时分秒
  8. hours = time.seconds // 3600
  9. minutes = time.seconds % 3600 // 60
  10. seconds = time.seconds % 3600 % 60
  11. return 'P%sDT%sH%sM%sS' % (time.days, hours, minutes, seconds) # 将字符串进行连接
  12. if __name__ == '__main__':
  13. dtnow = datetime.datetime.now() # 获取现在时间
  14. print(isoformat(dtnow))
  15. dtpast = datetime.datetime(1990, 12, 31) # 获取过去某个时间点
  16. print(isoformat(dtpast))
  17. interval = dtnow - dtpast # 得到时间差
  18. print(interval)
  19. print(isoformat(interval))

输出结果如下:

  1. 2017-01-14T10:54:28.323000
  2. 1990-12-31T00:00:00
  3. 9511 days, 10:54:28.323000
  4. P9511DT10H54M28S

发表评论

表情:
评论列表 (有 0 条评论,269人围观)

还没有评论,来说两句吧...

相关阅读