2017-01-02 47 views
-1

我想知道是否有任何可能的方式来生成随机POSIX ::时间范围从现在到10天回来吗?是否有任何有效的方法可以从现在起生成从范围到10天的随机date_time?

我想过是这样的:

using namespace boost::posix_time; 
second_clock now = second_clock::local_time(); 
second_clock back = now - hours(240); 

否则我将不得不本地日期和日期从10天回来,但我怎么能生成那个时期的一些随机日期?我知道这可能是那么容易,因为它可能是,但我的想法;/

+4

对不起,如果我误解了,但你为什么不用一个随机生成的整数替换'240'? – jogojapan

回答

-1

如果我理解正确的话,你想今天和10天回之间的随机时间戳。

我劝你要10天的毫秒,只是挑在该范围内的随机数,减去它现在的时间戳。

不幸的是,兰德不能产生一个随机数大。因此,您可以在部分中创建此类时间戳,并从中减去当前时间戳。

unsigned int days_in_milli, hrs_in_milli, mins_in_milli, secs_in_milli, num_milli_back; 
srand(time(NULL)); 
num_milli_back = rand() % 1000; 

days_in_milli = (rand() % 10) * 86400000; 
hrs_in_milli = (rand() % 24) * 3600000; 
mins_in_milli = (rand() % 60) * 60000; 
secs_in_milli = (rand() % 60) * 1000; 

cout << ((unsigned)time(NULL) - (days_in_milli + hrs_in_milli + mins_in_milli + secs_in_milli + num_milli_back)) << endl; 

,希望对您有所帮助

1

我建议使用uniform_int_distribution,使一个普通的工具,可以为不同的时间窗口创建随机时间戳发生器:

住在Coliru

#include <boost/date_time/posix_time/posix_time.hpp> 
#include <iostream> 
#include <random> 

using boost::posix_time::ptime; 
using boost::posix_time::minutes; 
using boost::posix_time::seconds; 
using boost::posix_time::hours; 

int main() { 
    auto rng = std::mt19937 { std::random_device{}() }; // correctly seeded random generator 

    auto date_selector = [&](boost::posix_time::time_duration window = boost::posix_time::hours(24*10), ptime now = boost::posix_time::second_clock::local_time()) { 
     auto start = now - window; 
     unsigned size = (now - start).total_seconds(); 
     return [=]() mutable { 
      return start + seconds(std::uniform_int_distribution<unsigned>(0,size)(rng)); 
     }; 
    }; 

    auto seven_days = date_selector(hours(7*24)); 
    std::cout << "seven_days:\n"; 
    for (auto i = 10; i; --i) std::cout << "\t" << seven_days() << "\n"; 

    auto ten_minutes = date_selector(minutes(10)); 
    std::cout << "ten_minutes:\n"; 
    for (auto i = 10; i; --i) std::cout << "\t" << ten_minutes() << "\n"; 
} 

打印,如

seven_days: 
    2016-Dec-27 22:32:13 
    2016-Dec-30 10:02:14 
    2016-Dec-27 13:14:59 
    2016-Dec-29 22:44:16 
    2016-Dec-30 17:28:37 
    2016-Dec-31 05:21:38 
    2017-Jan-01 10:33:44 
    2017-Jan-01 06:50:51 
    2016-Dec-28 09:52:12 
    2016-Dec-29 12:35:50 
ten_minutes: 
    2017-Jan-02 13:34:52 
    2017-Jan-02 13:38:25 
    2017-Jan-02 13:34:19 
    2017-Jan-02 13:37:44 
    2017-Jan-02 13:38:51 
    2017-Jan-02 13:39:34 
    2017-Jan-02 13:41:18 
    2017-Jan-02 13:41:05 
    2017-Jan-02 13:35:32 
    2017-Jan-02 13:37:08 
相关问题