【问题标题】:Generate list of random datetimes in ISO8601 format in Python在 Python 中生成 ISO8601 格式的随机日期时间列表
【发布时间】:2021-01-16 11:14:57
【问题描述】:

我想在 Python 中生成一个长度为 n 的列表,其中包含一个范围内的随机日期时间字符串。

import datetime
start = datetime.datetime(2019,1,1,0,0,0).astimezone().replace(microsecond=0).isoformat()
end = datetime.datetime(2019,12,31,23,59,59).astimezone().replace(microsecond=0).isoformat()

I had asked a similar question before,但我没有使用正确的日期时间格式。实现此目的的最佳方法是什么?

【问题讨论】:

  • 您似乎知道如何格式化为iso格式的字符串;如何生成随机日期基本上已在您的链接问题和here 我认为已得到解答。要获取随机日期列表,您只需添加列表推导或循环追加到列表。

标签: python datetime random iso8601


【解决方案1】:

在此处根据您的格式修改答案:https://stackoverflow.com/a/553448/7942856

from random import randrange
from datetime import timedelta, datetime

start = datetime(2019,1,1,0,0,0).astimezone().replace(microsecond=0)
end = datetime(2019,12,31,23,59,59).astimezone().replace(microsecond=0)

n = 5

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)

random_dates = [random_date(start, end) for i in range(n)]

输出:

[datetime.datetime(2019, 8, 6, 2, 25, 32, tzinfo=datetime.timezone(datetime.timedelta(seconds=39600), 'AUS Eastern Summer Time')), datetime.datetime(2019, 8, 5, 13, 2, 15, tzinfo=datetime.timezone(datetime.timedelta(seconds=39600), 'AUS Eastern Summer Time')), datetime.datetime(2019, 6, 24, 15, 57, 19, tzinfo=datetime.timezone(datetime.timedelta(seconds=39600), 'AUS Eastern Summer Time')), datetime.datetime(2019, 5, 3, 9, 35, 8, tzinfo=datetime.timezone(datetime.timedelta(seconds=39600), 'AUS Eastern Summer Time')), datetime.datetime(2019, 2, 12, 14, 33, 35, tzinfo=datetime.timezone(datetime.timedelta(seconds=39600), 'AUS Eastern Summer Time'))]

如果您想要文本 ISO 格式,只需在列表元素上调用 .isoformat()

[random_date(start, end).isoformat() for i in range(n)]
#['2019-05-03T22:06:56+11:00', '2019-12-31T06:56:09+11:00', '2019-03-09T05:07:59+11:00', '2019-03-24T09:24:42+11:00', '2019-01-08T03:23:31+11:00']

【讨论】:

  • 太棒了,这正是我所需要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 1970-01-01
  • 1970-01-01
  • 2018-02-26
相关资源
最近更新 更多