00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include <RcppDatetime.h>
00023
00024 RcppDatetime::RcppDatetime(void) : m_d(0),
00025 m_parsed(false),
00026 m_us(0) {
00027 };
00028
00029 RcppDatetime::RcppDatetime(const double d) : m_d(d),
00030 m_parsed(false),
00031 m_us(0) {
00032 };
00033
00034 void RcppDatetime::parseTime() {
00035
00036 time_t tt = static_cast<time_t>(floor(m_d));
00037 m_tm = *localtime(&tt);
00038
00039
00040 m_us = static_cast<int>(round( (m_d - tt) * 1.0e6));
00041
00042 m_parsed = true;
00043 };
00044
00045 std::ostream& operator<<(std::ostream& os, const RcppDatetime &datetime) {
00046 RcppDatetime dt(datetime);
00047 dt.parseTime();
00048 char buf[32], usec[16];
00049 strftime(buf, 31, "%Y-%m-%d %H:%M:%S", &dt.m_tm);
00050 snprintf(usec, 15, ".%.06d", dt.m_us);
00051 os << buf << usec;
00052 return os;
00053 };
00054
00055 RcppDatetime operator+(const RcppDatetime &date, double offset) {
00056 RcppDatetime tmp(date.m_d);
00057 tmp.m_d += offset;
00058 tmp.m_parsed = false;
00059 return tmp;
00060 };