xo-numeric/include/indentlog/print/time.hpp

90 lines
2.5 KiB
C++

/* @file time.hpp */
#pragma once
#include "indentlog/timeutil/timeutil.hpp"
namespace xo {
namespace time {
// ----- iso8601 -----
/* stream inserter that displays time in ISO 8601 format:
* 2012-04-23T18:25:43.511Z
*/
struct iso8601 {
iso8601(utc_nanos t0) : t0_{t0} {}
utc_nanos t0_;
}; /*iso8601*/
inline std::ostream &
operator<<(std::ostream & os,
iso8601 x)
{
timeutil::print_iso8601(x.t0_, os);
return os;
} /*operator<<*/
// ----- hms_msec -----
/* stream inserter that display time like:
* hh:mm:ss.nnn
*/
struct hms_msec {
hms_msec(nanos dt) : dt_{dt} {}
static hms_msec utc(utc_nanos t0) { return hms_msec(timeutil::utc_split_vs_midnight(t0).second); }
static hms_msec local(utc_nanos t0) { return hms_msec(timeutil::local_split_vs_midnight(t0).second); }
nanos dt_;
}; /*hms_msec*/
inline std::ostream &
operator<<(std::ostream & os, hms_msec x)
{
timeutil::print_hms_msec(x.dt_, os);
return os;
} /*operator<<*/
// ----- hms_usec -----
/* stream inserter that display time like:
* hh:mm:ss.nnnnnn
*/
struct hms_usec {
hms_usec(nanos dt) : dt_{dt} {}
static hms_usec utc(utc_nanos t0) { return hms_usec(timeutil::utc_split_vs_midnight(t0).second); }
static hms_usec local(utc_nanos t0) { return hms_usec(timeutil::local_split_vs_midnight(t0).second); }
nanos dt_;
}; /*hms_msec*/
inline std::ostream &
operator<<(std::ostream & os, hms_usec x)
{
timeutil::print_hms_usec(x.dt_, os);
return os;
} /*operator<<*/
} /*namespace time*/
} /*namespace xo*/
namespace std {
namespace chrono {
inline std::ostream & operator<<(std::ostream & os,
xo::time::utc_nanos t0)
{
xo::time::timeutil::print_utc_ymd_hms_usec(t0, os);
return os;
} /*operator<<*/
inline std::ostream & operator<<(std::ostream & os,
xo::time::nanos dt)
{
xo::time::timeutil::print_hms_usec(dt, os);
return os;
} /*operator<<*/
} /*namespace chrono*/
} /*namespace std*/
/* end time.hpp */