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