Python选择当年的随机日期

时间:2011-01-21 13:21:18

标签: python python-datetime

在Python中,您可以选择一年中的随机日期。例如如果年份是2010年,则返回日期可能是15/06/2010

5 个答案:

答案 0 :(得分: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之前的日期失败。

答案 1 :(得分: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 :(得分: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)

编辑:Michael Dunns回答中使用的序数日期比使用时间戳更好!人们可能希望将序数的使用与此结合起来。

答案 3 :(得分: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)

答案 4 :(得分:0)

这是一个古老的问题,但是,您可以使用我的新库^ _ ^ chancepy here

from chancepy import Chance

randomDate = Chance.date(year=2020)