Python select random date in current year

三世轮回 提交于 2019-12-04 04:24:39

It's much simpler to use ordinal dates (according to which today's date is 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))

This will fail for dates before 1AD.

Not directly, but you could add a random number of days to January 1st. I guess the following should work for the Gregorian calendar:

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

Edit: Ordinal dates as used in Michael Dunns answer are way better to use then timestamps! One might want to combine the use of ordinals with this though.

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)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!