Python 短时间格式
Python short time format
在Python中有没有一种简单的方法来格式化时间(delta)如下:
10:11:12 -> 10:11:12
09:10:11 -> 9:10:11
00:10:11 -> 10:11
00:09:10 -> 9:10
00:00:10 -> 10 (or maybe as 0:10)
00:00:09 -> 9 (or maybe as 0:09)
即抑制前导零和分隔符
(但当时间增量小于 1 分钟时可能不会)
简短回答:不,没有内置的 datetime 命令可以执行此操作..
长答案:您可以使用一组相对简单的条件语句来生成您自己的字符串,方法是测试是否有小时组件,然后是分钟组件,然后是秒组件:
import datetime
td = datetime.timedelta(hours=3, minutes=23, seconds=13)
if td.seconds >= 3600:
print "{:02d}:{:02d}:{:02d}".format(td.seconds//3600, (td.seconds%3600)//60, td.seconds%60)
elif td.seconds >= 60:
print "{:02d}:{:02d}".format(td.seconds//60, td.seconds%60)
elif td.seconds >= 0:
print "0:{:02d}".format(td.seconds)
else:
print "there is no time left.. RUN!"
如果你有字符串,你可以 lstrip 任何前导冒号或 0:
In [3]: "00:00:10".lstrip("0:")
Out[3]: '10'
In [4]: "09:10:11".lstrip("0:")
Out[4]: '9:10:11'
In [5]: "10:10:11".lstrip("0:")
Out[5]: '10:10:11'
只要我们有 0 或 : 就可以剥离,一旦发现除这两个字符以外的任何字符就停止。您可能想要了解的一种情况是 "00:00:00"
。在那种情况下,我不知道你期望什么。
如果你也想右对齐,你可以rjust结果:
In [18]: "00:00:19".lstrip("0:").rjust(8)
Out[18]: ' 19'
In [19]: "10:00:19".lstrip("0:").rjust(8)
Out[19]: '10:00:19'
In [20]: "09:00:19".lstrip("0:").rjust(8)
Out[20]: ' 9:00:19'
使用 str.format 作为 @C.LECLERC 评论。
"{:>8}".format("00:10:11".lstrip("0:"))
如果您不想进入几天,您只需在时间增量上调用 str:
In [6]: from datetime import timedelta
...:
...: td1,td2,td3 = timedelta(hours=10, minutes=10), timedelta(seconds=10),tim
...: edelta(minutes=9, seconds=10)
...: for t in (td1, td2, td3):
...: print(str(t))
...: print(str(t).lstrip("0:"))
...:
10:10:00
10:10:00
0:00:10
10
0:09:10
9:10
如果您想设置最短时间段,即 >= 1 分钟:
from datetime import timedelta
mn = timedelta(minutes=1)
td1,td2,td3 = timedelta(hours=10, minutes=10), timedelta(seconds=10),timedelta(minutes=9, seconds=10)
for t in (td1, td2, td3):
if t >= mn:
print(str(t).lstrip("0:"))
else:
print(str(t))
可能有更优雅的方法来做到这一点,但这里是一个开始,假设您实际上正在处理一个 timedelta
对象:
from datetime import timedelta
x = timedelta(hours = 10, minutes=11, seconds=12)
print('{:02d}:{:02d}:{:02d}'.format(x.seconds // 3600,
x.seconds // 60 % 60,
x.seconds % 60)
.lstrip('0:'))
与您的示例一起使用:
>>> from datetime import timedelta
>>> for h, m, s in [(10,11,12), (9,10,11), (0,10,11), (0,9,10), (0,0,10), (0,0,9)]:
... td = timedelta(hours = h, minutes=m, seconds=s)
... print('{:02d}:{:02d}:{:02d}'.format(td.seconds // 3600,
... td.seconds // 60 % 60,
... td.seconds % 60)
... .lstrip('0:'))
...
10:11:12
9:10:11
10:11
9:10
10
9
在Python中有没有一种简单的方法来格式化时间(delta)如下:
10:11:12 -> 10:11:12
09:10:11 -> 9:10:11
00:10:11 -> 10:11
00:09:10 -> 9:10
00:00:10 -> 10 (or maybe as 0:10)
00:00:09 -> 9 (or maybe as 0:09)
即抑制前导零和分隔符 (但当时间增量小于 1 分钟时可能不会)
简短回答:不,没有内置的 datetime 命令可以执行此操作..
长答案:您可以使用一组相对简单的条件语句来生成您自己的字符串,方法是测试是否有小时组件,然后是分钟组件,然后是秒组件:
import datetime
td = datetime.timedelta(hours=3, minutes=23, seconds=13)
if td.seconds >= 3600:
print "{:02d}:{:02d}:{:02d}".format(td.seconds//3600, (td.seconds%3600)//60, td.seconds%60)
elif td.seconds >= 60:
print "{:02d}:{:02d}".format(td.seconds//60, td.seconds%60)
elif td.seconds >= 0:
print "0:{:02d}".format(td.seconds)
else:
print "there is no time left.. RUN!"
如果你有字符串,你可以 lstrip 任何前导冒号或 0:
In [3]: "00:00:10".lstrip("0:")
Out[3]: '10'
In [4]: "09:10:11".lstrip("0:")
Out[4]: '9:10:11'
In [5]: "10:10:11".lstrip("0:")
Out[5]: '10:10:11'
只要我们有 0 或 : 就可以剥离,一旦发现除这两个字符以外的任何字符就停止。您可能想要了解的一种情况是 "00:00:00"
。在那种情况下,我不知道你期望什么。
如果你也想右对齐,你可以rjust结果:
In [18]: "00:00:19".lstrip("0:").rjust(8)
Out[18]: ' 19'
In [19]: "10:00:19".lstrip("0:").rjust(8)
Out[19]: '10:00:19'
In [20]: "09:00:19".lstrip("0:").rjust(8)
Out[20]: ' 9:00:19'
使用 str.format 作为 @C.LECLERC 评论。
"{:>8}".format("00:10:11".lstrip("0:"))
如果您不想进入几天,您只需在时间增量上调用 str:
In [6]: from datetime import timedelta
...:
...: td1,td2,td3 = timedelta(hours=10, minutes=10), timedelta(seconds=10),tim
...: edelta(minutes=9, seconds=10)
...: for t in (td1, td2, td3):
...: print(str(t))
...: print(str(t).lstrip("0:"))
...:
10:10:00
10:10:00
0:00:10
10
0:09:10
9:10
如果您想设置最短时间段,即 >= 1 分钟:
from datetime import timedelta
mn = timedelta(minutes=1)
td1,td2,td3 = timedelta(hours=10, minutes=10), timedelta(seconds=10),timedelta(minutes=9, seconds=10)
for t in (td1, td2, td3):
if t >= mn:
print(str(t).lstrip("0:"))
else:
print(str(t))
可能有更优雅的方法来做到这一点,但这里是一个开始,假设您实际上正在处理一个 timedelta
对象:
from datetime import timedelta
x = timedelta(hours = 10, minutes=11, seconds=12)
print('{:02d}:{:02d}:{:02d}'.format(x.seconds // 3600,
x.seconds // 60 % 60,
x.seconds % 60)
.lstrip('0:'))
与您的示例一起使用:
>>> from datetime import timedelta
>>> for h, m, s in [(10,11,12), (9,10,11), (0,10,11), (0,9,10), (0,0,10), (0,0,9)]:
... td = timedelta(hours = h, minutes=m, seconds=s)
... print('{:02d}:{:02d}:{:02d}'.format(td.seconds // 3600,
... td.seconds // 60 % 60,
... td.seconds % 60)
... .lstrip('0:'))
...
10:11:12
9:10:11
10:11
9:10
10
9