前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python将时间或者时间间隔转为ISO 8601格式

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

作者头像
卡尔曼和玻尔兹曼谁曼
发布2019-01-22 10:42:33
2K0
发布2019-01-22 10:42:33
举报

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

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.

下面是实现代码:

代码语言:javascript
复制
# -*- encoding: utf-8 -*-

import datetime


def isoformat(time):
    '''
    将datetime或者timedelta对象转换成ISO 8601时间标准格式字符串
    :param time: 给定datetime或者timedelta
    :return: 根据ISO 8601时间标准格式进行输出
    '''
    if isinstance(time, datetime.datetime): # 如果输入是datetime
        return time.isoformat();
    elif isinstance(time, datetime.timedelta): # 如果输入时timedelta,计算其代表的时分秒
        hours = time.seconds // 3600
        minutes = time.seconds % 3600 // 60
        seconds = time.seconds % 3600 % 60
        return 'P%sDT%sH%sM%sS' % (time.days, hours, minutes, seconds) # 将字符串进行连接


if __name__ == '__main__':
    dtnow = datetime.datetime.now() # 获取现在时间
    print(isoformat(dtnow))

    dtpast = datetime.datetime(1990, 12, 31) # 获取过去某个时间点
    print(isoformat(dtpast))

    interval = dtnow - dtpast # 得到时间差
    print(interval)
    print(isoformat(interval))

输出结果如下:

代码语言:javascript
复制
2017-01-14T10:54:28.323000
1990-12-31T00:00:00
9511 days, 10:54:28.323000
P9511DT10H54M28S
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年01月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档