2017-04-22 60 views
-1

如果我有一个日期,例如:Python的日期时间分组

datetime.datetime.now() 

我想知道什么时期,这属于下... 例如:

  • 5米时段,5,10, 15,20,25,30,35,40,45,50,55,00(?)...
  • 15m周期15,30,45 00(?)..
  • 4h期间,4 ,8,12,16,20,24 ...
  • 6h period,6,12,18,24 ...

什么是最好和最有效的方法来做到这一点?

理想的情况下,我会调用一个函数get_periods

def get_periods(time): 
    ... do something .. 
    return dict of periods time is associated with 

t = datetime.datetime.now() 
periods = get_periods(t) 

周期将是输入时间与相关联的时间段的一个字典。 例如,是我们叫get_periods(2017年1月1日三时23分00秒)......我期望返回..

periods = { 
5m => 25, 
15m => 30, 
4h => 4, 
6h => 6  
} 

编辑 我想我的问题是明确的,但是从多个用户现在说是不是...所以我的坏....

实例时间:2017年1月1日3时01分00秒

的时间周期: 4H:2017年1月1日(00/04/08/12/16/20):00:00 6h:2017-01-01(00/06/12/18):00:00

所以我想知道..从任何给定的输入日期..什么时间段其在4H分组,在6H分组,在X分钟的分组...希望他牛逼清零东西

+0

请解释一下您的期望输出。你的问题很不清楚。 –

+0

你想花几秒钟时间考虑一下吗? –

+0

@OrB对于任何给定的时间段,我想知道,什么12h周期落入,它落入什么4h周期,它落入什么15m周期,落入什么5min周期等等。 – Flibbr

回答

0
from datetime import datetime, timedelta 
from collections import Counter 

current = datetime.now() 
cuts = (
    (current - timedelta(minutes=5), '5m'), 
    (current - timedelta(minutes=15), '15m'), 
    (current - timedelta(hours=4), '4h'), 
    (datetime.min, 'long time ago'), 
) 

def get_period(time): 
    for start_time, label in cuts: 
     if time >= start_time: 
      return label 

stats = Counter(get_period(time) for time in times) 

for period, count in stats.items(): 
    print period, count 
+0

感谢您的答复亚历克斯,但这是不回答我想..我认为我的问题是明确的,但来自多个用户现在说这不是......所以我的坏......我编辑了我的问题,以尝试更清楚 – Flibbr