随机生成日期&用C ++编写的时间

时间:2014-04-30 17:36:13

标签: c++ c++11 random stl

任何人都可以建议/提供C ++代码来生成随机日期(更确切地说是日期和时间或YYYY-MM-DDTHH:MM:SS),在今天和5年之前。如果基于均匀分布,应该没问题。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

嗯,有些人可能认为以下是"比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之前(例如,在程序开头)播种RNG:

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