2017-01-02 49 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 
相關問題