【问题标题】:I am trying to loop between two times, from 8:00 to 17:00 for every 15 mins我试图在两次之间循环,从 8:00 到 17:00 每 15 分钟
【发布时间】:2013-02-09 01:12:38
【问题描述】:

我试图在两次之间循环,从 8:00 到 17:00 每 15 分钟一次

预期的输出将是一个时间列表,例如

[8:00, 8:15, 8:30, 8:45, 9:00]

这是我目前得到的

now = datetime(2013, 2, 9, 8, 00)
end = now + timedelta(hours=9)

但我不知道如何运行循环以返回我想要的列表。

感谢收看。

【问题讨论】:

  • 还不错。但不完全正确。因为我不需要 datetime 对象,所以我只需要提到的时隙。 slot = now while slot

标签: python datetime python-2.7


【解决方案1】:

你是说这个吗?

>>> now = datetime(2013,2,9,8,0)
>>> end = now + timedelta(hours=9)
>>> while now <= end:
        print 'doing something at', now
        now += timedelta(minutes=15)

doing something at 2013-02-09 08:00:00
doing something at 2013-02-09 08:15:00
doing something at 2013-02-09 08:30:00
doing something at 2013-02-09 08:45:00
../..

【讨论】:

    【解决方案2】:

    这行得通:

    import datetime
    
    now = datetime.datetime(2013, 2, 9, 8, 00)
    end=now+datetime.timedelta(hours=9)
    
    l=[]
    while now<=end:
        l.append(now)
        now+=datetime.timedelta(minutes=15)
    
    print [t.strftime("%H:%M") for t in l]  
    

    打印:

    ['08:00', '08:15', '08:30', '08:45', '09:00', '09:15', '09:30', '09:45', '10:00', '10:15', '10:30', '10:45', '11:00', '11:15', '11:30', '11:45', '12:00', '12:15', '12:30', '12:45', '13:00', '13:15', '13:30', '13:45', '14:00', '14:15', '14:30', '14:45', '15:00', '15:15', '15:30', '15:45', '16:00', '16:15', '16:30', '16:45', '17:00']
    

    【讨论】:

      【解决方案3】:
      l=[]
      
      while now<end:
          l.append(now)
          now+=timedelta(minutes=15)
      

      【讨论】:

        【解决方案4】:

        如果你可以提前计算出列表中元素的数量,你可以使用这个:

        输入:

        import datetime
        now = datetime.datetime(2013, 2, 9, 8, 00)
        print [(now + datetime.timedelta(minutes=15*n)).strftime('%H:%M') for n in range(37)]
        

        输出:

        ['08:00', '08:15', '08:30', '08:45', '09:00', '09:15', '09:30', '09:45', '10:00', '10:15', '10:30', '10:45', '11:00', '11:15', '11:30', '11:45', '12:00', '12:15', '12:30', '12:45', '13:00', '13:15', '13:30', '13:45', '14:00', '14:15', '14:30', '14:45', '15:00', '15:15', '15:30', '15:45', '16:00', '16:15', '16:30', '16:45', '17:00']
        

        【讨论】:

          【解决方案5】:
          import datetime as dt
          
          def timerange (start, end, step):
              while start < end:
                  yield start
                  start += step
          
          for x in timerange (dt.datetime (2013, 2, 9, 8), dt.datetime (2013, 2, 9, 17), dt.timedelta (minutes = 15) ):
                  print (x)
          

          如果您需要更频繁地步进时间范围。

          【讨论】:

            【解决方案6】:

            我会认真地给 Delorean 一个认真的外观,做这样的事情就像 for 循环一样容易。

            >>> import delorean
            >>> from delorean import stops
            >>> for stop in stops(freq=delorean.MINUTELY, count=4, start=d1, interval=15):
            ...     print stop.datetime
            ... 
            2012-05-06 00:00:00+00:00
            2012-05-06 00:15:00+00:00
            2012-05-06 00:30:00+00:00
            2012-05-06 00:45:00+00:00
            

            您还可以提供一个停止时间,这将是您问题的绝佳示例。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-01-05
              • 2014-01-02
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-01-15
              相关资源
              最近更新 更多