用Python生成随机ISO8601日期?

7 投票
3 回答
7591 浏览
提问于 2025-04-18 16:50

我看到过如何将ISO格式的日期,比如 2007-01-14T20:34:22+00:00,转换成更易读的格式,使用的是Python的 datetime 模块。

有没有简单的方法可以生成一个随机的ISO8601日期,类似于这个回答中的 datetime 字符串呢?

3 个回答

4

如果你想生成一个随机日期,可以把它生成成符合ISO8601格式的样子:

import random

iso_format = "{Year}-{Month}-{Day}T{Hour}:{Minute}+{Offset}"

year_range = [str(i) for i in range(1900, 2014)]
month_range = ["01","02","03","04","05","06","07","08","09","10","11","12"]
day_range = [str(i).zfill(2) for i in range(1,28)]
hour_range = [str(i).zfill(2) for i in range(0,24)]
min_range = [str(i).zfill(2) for i in range(0,60)]
offset = ["00:00"]

argz = {"Year": random.choice(year_range),
        "Month": random.choice(month_range),
        "Day" : random.choice(day_range),
        "Hour": random.choice(hour_range),
        "Minute": random.choice(min_range),
        "Offset": random.choice(offset)
        }

print iso_format.format(**argz)

不过,如果你想确保这个日期是有效的,那就需要对这个代码进行一些修改。

6
  1. 首先,决定你想要随机日期的范围。
  2. 计算这些日期的时间戳,也就是从1970年1月1日开始到这些日期的秒数,分别用startend来表示。
  3. 使用random.randrange(start, end)来随机选择一个在startend之间的数字。
  4. 把这个随机生成的整数转换成日期时间格式,使用datetime.fromtimestamp()
  5. 最后,把这个日期时间转换成你想要的输出格式。
15

我建议你使用这个 Faker 库。

pip install faker

这是一个可以生成各种随机“假”数据的工具包。下面使用 Faker 可以生成一个随机的 datetime 对象,然后你可以用 datetime.datetime.isoformat 方法把它转换成 ISO8601 字符串格式。

import faker

fake = faker.Faker()
rand_date = fake.date_time()  # datetime(2006, 4, 30, 3, 1, 38)
rand_date_iso = rand_date.isoformat()  # '2006-04-30T03:01:38'

撰写回答