2012-03-16 26 views
3

如何在Python中生成以下字符串序列?用步骤7秒生成时间顺序

00:00:00 
00:00:07 
00:00:14 
00:00:21 
... 
00:00:49 
00:00:56 
00:01:03 

该步骤是7秒。结束时间大约是03:30:+/-

我会使用模块化算术的解决方案(第一个1200有小时,60分钟有剩余分钟,其余的是秒,数字应该转换为字符串并且“一位”字符串应以“0”为前缀)。

在标准库或列表理解中使用一些辅助生成器是否有一些更聪明的(pythonic)解决方案?

+1

看一看[本SO问题](http://stackoverflow.com/questions/100210/python-easy-way-to-add-n-seconds-to-a-datetime-time) – 2012-03-16 11:15:45

+0

[Python生成日期系列]的可能重复(https://stackoverflow.com/questions/4479800/python-generate-dates-series) – 2017-09-25 08:52:31

回答

7
def yield_times(): 
    from datetime import date, time, datetime, timedelta 
    start = datetime.combine(date.today(), time(0, 0)) 
    yield start.strftime("%H:%M:%S") 
    while True: 
     start += timedelta(seconds=7) 
     yield start.strftime("%H:%M:%S") 

>>> gen = yield_times() 
>>> for ii in range(5): 
...  print gen.next() 
... 
00:00:00 
00:00:07 
00:00:14 
00:00:21 
00:00:28 
4

试试这个

from datetime import datetime, timedelta 

now = datetime(2000, 1, 1, 0, 0, 0) 
last = datetime(2000, 1, 1, 3, 30, 0) 
delta = timedelta(seconds=7) 

times = [] 
while now < last: 
    times.append(now.strftime('%H:%M:%S')) 
    now += delta 
2

我认为你是在通过观察发电机和列表理解复杂的事情。 Python datetime module将很容易地做到这一点。

from datetime import datetime, timedelta 

t = datetime(2012, 1, 1, 0, 0, 0) 

while t < datetime(2012, 1, 1, 3, 30, 0): 
    print t.time() 

    t = t + timedelta(seconds=7) 
0

这会在上午9:00到下午2:00之间每隔5分钟生成一次== 14:00。

In [1]: from datetime import datetime 

In [2]: [str(datetime(2012, 1, 1, hr, min, 0).time()) for hr in range(9,14) for min in range(0,60,5)] 
Out[2]: 
['09:00:00', 
'09:05:00', 
'09:10:00', 
'09:15:00', 
'09:20:00', 
'09:25:00', 
'09:30:00', 
'09:35:00', 
'09:40:00', 
'09:45:00', 
'09:50:00', 
'09:55:00', 
'10:00:00', 
'10:05:00', 
'10:10:00', 
'10:15:00', 
'10:20:00', 
'10:25:00', 
'10:30:00', 
'10:35:00', 
'10:40:00', 
'10:45:00', 
'10:50:00', 
'10:55:00', 
'11:00:00', 
'11:05:00', 
'11:10:00', 
'11:15:00', 
'11:20:00', 
'11:25:00', 
'11:30:00', 
'11:35:00', 
'11:40:00', 
'11:45:00', 
'11:50:00', 
'11:55:00', 
'12:00:00', 
'12:05:00', 
'12:10:00', 
'12:15:00', 
'12:20:00', 
'12:25:00', 
'12:30:00', 
'12:35:00', 
'12:40:00', 
'12:45:00', 
'12:50:00', 
'12:55:00', 
'13:00:00', 
'13:05:00', 
'13:10:00', 
'13:15:00', 
'13:20:00', 
'13:25:00', 
'13:30:00', 
'13:35:00', 
'13:40:00', 
'13:45:00', 
'13:50:00', 
'13:55:00'] 

In [3]: