char oldfill = m.fill();
m.fill('0');
// localtime. this looks like an absolute time.
- // aim for http://en.wikipedia.org/wiki/ISO_8601
+ // conform to http://en.wikipedia.org/wiki/ISO_8601
struct tm bdt;
time_t tt = Clock::to_time_t(t);
localtime_r(&tt, &bdt);
+ char tz[32] = { 0 };
+ strftime(tz, sizeof(tz), "%z", &bdt);
m << std::setw(4) << (bdt.tm_year+1900) // 2007 -> '07'
<< '-' << std::setw(2) << (bdt.tm_mon+1)
<< '-' << std::setw(2) << bdt.tm_mday
- << ' '
+ << 'T'
<< std::setw(2) << bdt.tm_hour
<< ':' << std::setw(2) << bdt.tm_min
<< ':' << std::setw(2) << bdt.tm_sec
<< "." << std::setw(6) << duration_cast<microseconds>(
- t.time_since_epoch() % seconds(1));
+ t.time_since_epoch() % seconds(1)).count()
+ << tz;
m.fill(oldfill);
m.unsetf(std::ios::right);
return m;
#include "common/ceph_time.h"
#include "include/rados.h"
#include "gtest/gtest.h"
+#include "include/stringify.h"
using ceph::real_clock;
ASSERT_GT(cmtb - cmta, ceph::signedspan::zero());
ASSERT_GT((cmtb - cmta).count(), 0);
}
+
+TEST(TimePoints, stringify) {
+ ceph::real_clock::time_point tp(seconds(1556122013) + nanoseconds(39923122));
+ string s = stringify(tp);
+ ASSERT_EQ(s.size(), strlen("2019-04-24T11:06:53.039923-0500"));
+ ASSERT_TRUE(s[26] == '-' || s[26] == '+');
+ ASSERT_EQ(s.substr(0, 9), "2019-04-2");
+
+ ceph::coarse_real_clock::time_point ctp(seconds(1556122013) +
+ nanoseconds(399000000));
+ s = stringify(ctp);
+ ASSERT_EQ(s.size(), strlen("2019-04-24T11:06:53.399000-0500"));
+ ASSERT_TRUE(s[26] == '-' || s[26] == '+');
+ ASSERT_EQ(s.substr(0, 9), "2019-04-2");
+}