2011-01-21 200 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) 
相关问题