首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python短时间格式

Python短时间格式
EN

Stack Overflow用户
提问于 2016-10-21 16:44:44
回答 3查看 1.2K关注 0票数 0

在Python中是否有一种简单的方法来格式化时间(增量),如下所示:

代码语言:javascript
复制
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分钟时可能不是这样)。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-21 17:01:38

如果您有字符串,您只需去掉任何引导冒号或0:

代码语言:javascript
复制
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"。在这种情况下,我不知道你期望什么。

如果您也试图正确地对齐,则可以重新调整结果:

代码语言:javascript
复制
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的注释。

代码语言:javascript
复制
"{:>8}".format("00:10:11".lstrip("0:"))

如果您不打算进入几天,您只需要在时间增量上调用str:

代码语言:javascript
复制
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分钟:

代码语言:javascript
复制
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))
票数 5
EN

Stack Overflow用户

发布于 2016-10-21 17:02:39

这样做可能有一种更优雅的方法,但首先,假设您实际上是在处理一个timedelta对象:

代码语言:javascript
复制
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:'))

与您的示例一起使用:

代码语言:javascript
复制
>>> 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
票数 2
EN

Stack Overflow用户

发布于 2016-10-21 17:00:23

简短的回答:不,没有内置的datetime命令来执行此操作。

长答案:您可以使用一组相对简单的条件语句来生成您自己的字符串,方法是测试是否存在一个小时组件,然后是一个分钟组件,然后是一个秒组件:

代码语言:javascript
复制
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!"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40181721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档