2011-01-21 42 views
7

Pythonでは、1年からランダムな日付を選択できますか?例えば年が2010の場合、返される日付は15/06/2010となりますPythonは今年のランダム日付を選択します

+6

ここではランダムな日付です:2010-08-22コード内で生成する必要はありません。 ;)ああ、あなたは毎回別のものを意味します。 –

答えて

19

(これは今日の日付に応じては734158です):これは1AD前の日付のために失敗します

from datetime import date 
import random 

start_date = date.today().replace(day=1, month=1).toordinal() 
end_date = date.today().toordinal() 
random_day = date.fromordinal(random.randint(start_date, end_date)) 

+1

+1非常にきれい!私は序数の日付が以前のものであるかどうかはわかりませんでした:-) "日付の前"にさらに大きな制限がある私のtimstamp-solutionは明らかに良くてきれいです... – plundra

+1

質問は " 1月1日と今日。 – AndiDog

+3

タイトルは「今年のランダムな日付を選択」でした。任意の年に任意の日付を取得するには、 'start_date = date(day = 1、month = 1、year = MY_YEAR).toordinal() 'と 'end_date = date(例えば、 day = 31、month = 12、year = MY_YEAR).toordinal() '。 –

3

1月1日にランダムな日数を追加できます。私は、次のグレゴリオ暦のために働く必要がありますね:

from datetime import date, timedelta 
import random 
import calendar 

# Assuming you want a random day of the current year 
firstJan = date.today().replace(day=1, month=1) 

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

ニース。実際に 'calendar'モジュールに' isleap() '関数があります。これはあなた自身を定義するのを節約します。 –

+0

@Daniel:ありがとうございます。毎日何か新しいことを学ぶこと:)カレンダーモジュールをまだ(まだ)使用していない。私の答えを編集しました。 – AndiDog

1
import datetime, time 
import random 

def year_start(year): 
    return time.mktime(datetime.date(year, 1, 1).timetuple()) 

def rand_day(year): 
    stamp = random.randrange(year_start(year), year_start(year + 1)) 
    return datetime.date.fromtimestamp(stamp) 

編集:序日付マイケルDunnsの答えに使用されるように道そして、タイムスタンプを使用することをお勧めします!しかし、これと一緒に序文の使用を組み合わせたいかもしれません。

それは序数の日付を使用してはるかに簡単だ
0
import calendar 
import datetime 
import random 

def generate_random_date(future=True, years=1): 
    today = datetime.date.today() 

    #Set the default dates 
    day = today.day 
    year = today.year 
    month = today.month 

    if future: 
     year = random.randint(year, year + years) 
     month = random.randint(month, 12) 

     date_range = calendar.monthrange(year, month)[1] #dates possible this month 
     day = random.randint(day + 1, date_range) #1 day in the future 
    else: 
     year = random.randint(year, year - years) 
     month = random.randint(1, month) 
     day = random.randint(1, day - 1) 

    return datetime.date(year, month, day) 
関連する問題