2016-10-21 23 views
0

有沒有在Python的簡單方法格式化時間(增量)如下:的Python短的時間格式

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分鐘)

+1

應該是什麼在 「10點零零分10秒」 時的輸出? –

+0

@anonymous,非常確定。 –

+1

10:00:10我想,因爲有一些領先的非零數字,即小時= 10。 – Phiplex

回答

5

如果你有字符串,你可以只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在timedeltas,如果你不打算到天:如果你想設置的最小時間段即> =1分鐘

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 

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)) 
+1

WOW不錯。順便說一句,我會添加一些更適合這個問題的格式:'「{:> 8}」。format(「00:10:11」.lstrip(「0:」))' –

+0

@ C.LECLERC。我不知道它是否只是這個問題的視覺表示,或者OP希望字符串對齊,但是陛下能夠正常工作。 –

+0

'.rjust(8)'只是...更好的所有術語 –

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!"
2

可能有一個更優雅的做法,但這是一個開始,假設您實際上正在處理一個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