2014-04-30 52 views
-3

任何人都可以请求建议/提供C++代码以生成随机日期(更准确地说是日期&时间或YYYY-MM-DDTHH:MM:SS),在今天和5年前之间生成。如果它是基于统一分配的话,应该没问题。在C++中随机生成日期和时间

+2

因为这是一个非常具体的问题,请解释一下,你被困当你第一次尝试自己的解决方案时。 –

+2

生成0到5年之间秒数的随机数,并将其添加到5年前的日期。 – clcto

+0

不,我们不能提供代码。首先告诉我们你有什么尝试。 – Zaffy

回答

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你开始使用它(例如,在你的程序的开始)前:

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

+1可能是统一的分配要求。 – drescherjm

+0

感谢,+ barak manos和+ clcto,这几乎是我的问题的答案,可以使用stl分发。再次感谢 – pascal

+0

@SKhan:不客气:) –

0

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

+0

'strptime'不是标准的C++;它是Posix的一部分。 –