在C++中随机生成日期和时间
Randomly generate date & time in C++
有人能建议/提供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((将该长整数转换回日期/时间字符串。
相关文章:
- 使用 C++将时间戳转换为格式化的日期时间
- C++代码的 C# 日期时间等效项是什么?
- 如何在提升日期时间中创建日期范围?
- 在 c++ 中将 ISO 日期时间转换为本地日期时间并提取时间
- Rcpp/C++/R:比较日期时间矢量与日期时间时出错(错误:"运算符>"的不明确重载)
- 如何将毫秒的日期时间字符串转换为 UNIX 时间戳
- 扩展中的日期时间对象方法C++问题
- 将DateTime字符串分为C 的日期时间
- C++以微秒为单位解析日期/时间
- 仅将纪元字符串保存到 mysql 日期时间年/月/日,但没有小时分钟秒
- 使用提升解析日期时间字符串:采用个位数小时格式
- C++ Poco SQL 查询不返回具有'between'和'and'日期时间绑定的结果
- 快速将带有时区的日期时间字符串转换为 UNIX 时间戳(C++)
- 从C 的时间戳提取日期时间戳
- 标准::get_time 中的日期时间格式
- 生成包含分数和时区的完整 iso 日期时间表示字符串
- 通过 ODBC C++将带有日期时间的记录插入 SQL Server 2014 的问题
- 在 C++20 中获取当前日期/时间是否线程安全?
- mongocxx:插入日期时间
- Poco 日期时间格式化程序 - 使用当前时区打印时间戳