在C++中随机生成日期和时间

Randomly generate date & time in C++

本文关键字:日期 时间 C++ 随机      更新时间:2023-10-16

有人能建议/提供C++代码来生成从今天到5年前的随机日期(更准确地说是日期和时间或YYYY-MM-DDTHH:MM:SS(吗。如果是基于均匀分布的,应该没问题。

好吧,有些人可能会认为下面的内容"比C++更像C",但你仍然可以尝试一下。。。


首先,定义要"返回"的最大秒数:

#define MAX_NUM_OF_SECONDS (5*365*24*60*60) // number of seconds in 5 years

为了确保均匀分布,这个数字应该而不是大于RAND_MAX*RAND_MAX


然后,实现一个返回随机内容的时间/日期结构的函数:

struct tm* GetTimeAndDate()
{
    unsigned int now_seconds  = (unsigned int)time(NULL);
    unsigned int rand_seconds = (rand()*rand())%(MAX_NUM_OF_SECONDS+1);
    time_t       rand_time    = (time_t)(now_seconds-rand_seconds);
    return localtime(&rand_time);
}

如果您使用的是多线程应用程序,请注意此函数是线程不安全的。


最后,在开始使用RNG之前(例如,在程序开始时(对其进行种子处理:

int main()
{
    ...
    srand((unsigned int)time(NULL));
    ...
}

如果知道开始日期和结束日期,可以使用strptime((将这些日期转换为time_t,后者通常是长整数。给定这些长整数,您应该能够在它们之间创建一个随机整数。使用strftime((将该长整数转换回日期/时间字符串。