2017-05-22 18 views
1

私はランダムに生成し、これを使用していPythonでランダムな日時間隔を生成するには?

1月1日から2017年6月2日または5月4日からの2018年9月9日にPythonで時間間隔

などの日付のランダムなペアを生成する必要があります日付:

now = firstJan + timedelta(days = random.randint(0, 365 if calendar.isleap(firstJan.year) else 364)) 

ランダムな間隔を生成するにはどうすればよいですか?ここで

+0

分布のどのようなあなたがあなたの日付を持っている範囲を期待していますか?毎日同じように範囲内に入るべきでしょうか?または、毎日同じように範囲の終点の1つになる可能性がありますか?それらは異なっている!明らかな(単純な)ソリューションは、上記のコードで生成した日付を開始日として使用し、範囲の長さを選択し、その終了日を取得するためにその日数を追加することです。しかし、他にもたくさんの方法があります。そして、あなたは私たちにあなたにとって最良のものを教えるための良い方法を与えていません。 – Blckknght

答えて

0

は、私はそれをやった方法です -

import datetime, random, calendar 

# Function to get random date with given month & year 
def getDate(m, y, start=1): 
    # For months havin 30 days 
    if m in [4,6,9,11]: 
     return random.randrange(start,30,1) 
    # For month of Feb, to check if year is leap or not 
    elif m == 2: 
     if not calendar.isleap(y): 
      return random.randrange(start,28,1) 
     else: 
      return random.randrange(start,29,1) 
    else: 
      return random.randrange(start,31,1) 

# Function to return random time period 
def getRandomPeriod(minYear, maxYear): 
    if minYear > maxYear: 
     raise ValueError('Please enter proper year range') 
    if minYear == maxYear: 
     y1 = minYear 
     y2 = minYear 
    else: 
     y1 = random.randrange(minYear, maxYear) 
     # Choosing lower bound y2 to be same as y1, so that y2 >= y1 
     y2 = random.randrange(y1, maxYear) 

    m1 = random.randrange(1,12) 
    if y2 != y1: 
     m2 = random.randrange(1,12,1) 
    else: 
     # Choosing lower bound m2 to be same as m1, so that m2 >= m1 
     m2 = random.randrange(m1,12,1) 

    d1 = getDate(m1, y1) 
    if m1==m2 and y1==y2: 
     d2 = getDate(m2, y2, start=d1+1) 
    else: 
     d2 = getDate(m2, y2) 

    t1 = datetime.datetime(y1,m1,d1) 
    t2 = datetime.datetime(y2,m2,d2) 
    return (t1.strftime('%B %d %Y'), t2.strftime('%B %d %Y')) 

getRandomPeriod(2010,2010) 
=> ('January 03 2010', 'October 09 2010') 

getRandomPeriod(2010,2012) 
=> ('July 07 2011', 'August 06 2011')