前言
大家都知道,Python自带的datetime库提供了将datetime转为ISO 8610格式的函数,但是对于时间间隔(inteval)并没有提供转换的函数,下面我们动手写一个。 下面话不多说了,来一起看看详细的介绍吧。
对于时间间隔,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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# -*- 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))
|
输出结果如下:
1
2
3
4
|
2017-01-14T10:54:28.323000
1990-12-31T00:00:00
9511 days, 10:54:28.323000
P9511DT10H54M28S
|
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。
原文链接:http://blog.csdn.net/theonegis/article/details/54425636