如何生成必须介于其他两个给定日期之间的随机日期?
函数的签名应该是这样的:
random_date("1/1/2008 1:30 PM", "1/1/2009 4:50 AM", 0.34)
                   ^                       ^          ^
            date generated has  date generated has  a random number
            to be after this    to be before this并返回一个日期,如下所示:
发布于 2009-02-16 14:21:56
from random import randrange
from datetime import timedelta
def random_date(start, end):
    """
    This function will return a random datetime between two datetime 
    objects.
    """
    delta = end - start
    int_delta = (delta.days * 24 * 60 * 60) + delta.seconds
    random_second = randrange(int_delta)
    return start + timedelta(seconds=random_second)精度是秒。如果你愿意,你可以将精度提高到微秒,或者减少到半小时。为此,只需更改最后一行的计算即可。
示例运行:
from datetime import datetime
d1 = datetime.strptime('1/1/2008 1:30 PM', '%m/%d/%Y %I:%M %p')
d2 = datetime.strptime('1/1/2009 4:50 AM', '%m/%d/%Y %I:%M %p')
print(random_date(d1, d2))输出:
2008-12-04 01:50:17发布于 2011-11-18 00:25:52
一个小版本。
import datetime
import random
def random_date(start, end):
    """Generate a random datetime between `start` and `end`"""
    return start + datetime.timedelta(
        # Get a random amount of seconds between `start` and `end`
        seconds=random.randint(0, int((end - start).total_seconds())),
    )请注意,这两个
和
参数应该是
对象。如果你得到的是字符串,那么转换起来就相当容易了。其他答案指出了一些这样做的方法。
发布于 2013-06-19 21:59:57
更新答案
它使用起来更简单
Faker
..。
安装
pip install faker用法:
from faker import Faker
fake = Faker()
fake.date_between(start_date='today', end_date='+30y')
# datetime.date(2025, 3, 12)
fake.date_time_between(start_date='-30y', end_date='now')
# datetime.datetime(2007, 2, 28, 11, 28, 16)
# Or if you need a more specific date boundaries, provide the start 
# and end dates explicitly.
import datetime
start_date = datetime.date(year=2015, month=1, day=1)
fake.date_between(start_date=start_date, end_date='+30y')老答案
使用雷达很简单
安装
pip install radar用法
import datetime
import radar 
# Generate random datetime (parsing dates from str values)
radar.random_datetime(start='2000-05-24', stop='2013-05-24T23:59:59')
# Generate random datetime from datetime.datetime values
radar.random_datetime(
    start = datetime.datetime(year=2000, month=5, day=24),
    stop = datetime.datetime(year=2013, month=5, day=24)
)
# Just render some random datetime. If no range is given, start defaults to 
# 1970-01-01 and stop defaults to datetime.datetime.now()
radar.random_datetime()https://stackoverflow.com/questions/553303
复制相似问题