Signature Description Parameters

template<typename T>
static std::vector<typename I>
gen_datetime_index(const char *start_datetime,
                   const char *end_datetime,
                   time_frequency t_freq,
                   long increment = 1,
                   DT_TIME_ZONE tz = DT_TIME_ZONE::LOCAL);
        
This static method generates a date/time-based index vector that could be fed directly to one of the load methods. Depending on the specified frequency, it generates specific timestamps (see below).
It returns a vector of I timestamps.
Currently I could be any built-in numeric type or DateTime
NOTE: It is the responsibility of the programmer to make sure I type is big enough to contain the frequency.
start_datetime, end_datetime: They are the start/end date/times of requested timestamps.
They must be in the following format:
MM/DD/YYYY [HH[:MM[:SS[.MMM]]]]
t_freq: Specifies the timestamp frequency. Depending on the frequency, and I type specific timestamps are generated as follows:
  • I type of DateTime always generates timestamps of DateTime.
  • Annual, monthly, weekly, and daily frequencies generates YYYYMMDD timestamps.
  • Hourly, minutely, and secondly frequencies generates epoch timestamps (64 bit).
  • Millisecondly frequency generates nano-second since epoch timestamps (128 bit).
increment: Increment in the units of the frequency
tz: Time-zone of generated timestamps
static void test_gen_datetime_index()  {

    std::cout << "\nTesting gen_datetime_index() ..." << std::endl;

    std::vector<unsigned long>  idx_vec1 =
        MyDataFrame::gen_datetime_index("01/01/2018", "12/31/2038", time_frequency::annual, 1, DT_TIME_ZONE::AM_NEW_YORK);

    assert(idx_vec1.size() == 21);
    assert(idx_vec1.capacity() == 22);
    assert(idx_vec1[0] == 20180101);
    assert(idx_vec1[1] == 20190101);
    assert(idx_vec1[10] == 20280101);
    assert(idx_vec1[20] == 20380101);

    idx_vec1 = MyDataFrame::gen_datetime_index("01/01/2018", "12/31/2038", time_frequency::monthly, 3, DT_TIME_ZONE::AM_NEW_YORK);
    assert(idx_vec1.size() == 84);
    assert(idx_vec1.capacity() == 86);
    assert(idx_vec1[0] == 20180101);
    assert(idx_vec1[1] == 20180401);
    assert(idx_vec1[2] == 20180701);
    assert(idx_vec1[40] == 20280101);
    assert(idx_vec1[83] == 20381001);

    idx_vec1 = MyDataFrame::gen_datetime_index("01/01/2018", "12/31/2038", time_frequency::weekly, 4, DT_TIME_ZONE::AM_NEW_YORK);
    assert(idx_vec1.size() == 274);
    assert(idx_vec1.capacity() == 274);
    assert(idx_vec1[0] == 20180101);
    assert(idx_vec1[1] == 20180129);
    assert(idx_vec1[2] == 20180226);
    assert(idx_vec1[272] == 20381108);
    assert(idx_vec1[273] == 20381206);

    idx_vec1 = MyDataFrame::gen_datetime_index("01/01/2018", "12/31/2038", time_frequency::daily, 1, DT_TIME_ZONE::AM_NEW_YORK);
    assert(idx_vec1.size() == 7669);
    assert(idx_vec1.capacity() == 7670);
    assert(idx_vec1[0] == 20180101);
    assert(idx_vec1[1] == 20180102);
    assert(idx_vec1[2] == 20180103);
    assert(idx_vec1[7667] == 20381229);
    assert(idx_vec1[7668] == 20381230);

    idx_vec1 = MyDataFrame::gen_datetime_index("01/01/2018","12/31/2022", time_frequency::hourly, 1, DT_TIME_ZONE::AM_NEW_YORK);
    assert(idx_vec1.size() == 43800);
    assert(idx_vec1.capacity() == 43801);
    assert(idx_vec1[0] == 1514782800);
    assert(idx_vec1[1] == 1514786400);
    assert(idx_vec1[2] == 1514790000);
    assert(idx_vec1[43798] == 1672455600);
    assert(idx_vec1[43799] == 1672459200);

    idx_vec1 = MyDataFrame::gen_datetime_index("01/01/2018", "03/31/2018", time_frequency::secondly, 10, DT_TIME_ZONE::AM_NEW_YORK);
    assert(idx_vec1.size() == 768600);
    assert(idx_vec1.capacity() == 768601);
    assert(idx_vec1[0] == 1514782800);
    assert(idx_vec1[1] == 1514782810);
    assert(idx_vec1[2] == 1514782820);
    assert(idx_vec1[768598] == 1522468780);
    assert(idx_vec1[768599] == 1522468790);

    idx_vec1 = MyDataFrame::gen_datetime_index("01/01/2018 00:00:00.000", "01/01/2018 10:10:01.600", time_frequency::millisecondly, 500, DT_TIME_ZONE::AM_NEW_YORK);
    assert(idx_vec1.size() == 73204);
    assert(idx_vec1.capacity() == 73229);
    assert(idx_vec1[0] == 1514782800000000000);
    assert(idx_vec1[1] == 1514782800500000000);
    assert(idx_vec1[2] == 1514782801000000000);
    assert(idx_vec1[73201] == 1514819400500000000);
    assert(idx_vec1[73202] == 1514819401000000000);
    assert(idx_vec1[73203] == 1514819401500000000);

    std::vector<DateTime>   idx_vec2 =
        StdDataFrame<DateTime>::gen_datetime_index("01/01/2018", "12/31/2022", time_frequency::hourly, 1, DT_TIME_ZONE::AM_NEW_YORK);

    assert(idx_vec2.size() == 43800);
    assert(idx_vec2[0].string_format (DT_FORMAT::DT_TM2) == "01/01/2018 00:00:00.000");
    assert(idx_vec2[1].string_format (DT_FORMAT::DT_TM2) == "01/01/2018 01:00:00.000");
    assert(idx_vec2[2].string_format (DT_FORMAT::DT_TM2) == "01/01/2018 02:00:00.000");
    assert(idx_vec2[43798].string_format (DT_FORMAT::DT_TM2) == "12/30/2022 22:00:00.000");
    assert(idx_vec2[43799].string_format (DT_FORMAT::DT_TM2) == "12/30/2022 23:00:00.000");
}
C++ DataFrame