2011-01-21 37 views
7

在Python中,您可以從一年中選擇一個隨機日期。例如如果年份是2010,則返回的日期可能是15/06/2010Python選擇當前年份的隨機日期

+6

以下是您的隨機日期:2010-08-22。現在您不必在代碼中生成一個。 ;)哦,你的意思是每次都有不同的意思。 – 2011-01-21 14:01:12

回答

19

這是更簡單的使用順序日期(根據今天的日期是734158):

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)) 

這將爲1AD日期之前失敗。

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()`函數,可以自己定義它。 – 2011-01-21 13:54:17

+0

@Daniel:謝謝,你說得對。在日常學習新的東西:)還沒有使用日曆模塊(很多)。編輯我的答案。 – AndiDog 2011-01-21 14:03:18

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) 

編輯:順序日期爲邁克爾·鄧斯回答的有更好的方式來使用,然後戳!有人可能希望將序號的使用與此結合起來。

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) 
相關問題