27 size_t formatDate(
char* buf,
size_t const max, int64_t
const unixtime) {
30 unsigned const doe =
static_cast<unsigned>(div_era.
rem);
31 unsigned const yoe = (doe - doe / 1460 + doe / 36524 - (doe == 146096)) / 365;
32 unsigned const doy = doe - (365 * yoe + yoe / 4 - yoe / 100);
33 unsigned const moy = (5 * doy + 2) / 153;
34 static_assert(8 <=
sizeof(
long long));
35 long long const y = 2000 + div_era.
quot * 400 + yoe + (9 < moy);
36 unsigned const m = moy + (9 < moy ? -9 : 3);
37 unsigned const d = doy - (153 * moy + 2) / 5 + 1;
38 int const len = snprintf(buf, max,
"%04lld-%02u-%02u", y, m, d);
39 if (0 <= len && static_cast<size_t>(len) < max) {
40 return static_cast<size_t>(len);
47 int64_t
const timestamp,
49 bool use_iso_format) {
50 constexpr
int pow10[10]{
51 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000};
55 unsigned const doe =
static_cast<unsigned>(div_era.
rem);
56 unsigned const yoe = (doe - doe / 1460 + doe / 36524 - (doe == 146096)) / 365;
57 unsigned const doy = doe - (365 * yoe + yoe / 4 - yoe / 100);
58 unsigned const moy = (5 * doy + 2) / 153;
59 static_assert(8 <=
sizeof(
long long));
60 long long const y = 2000 + div_era.
quot * 400 + yoe + (9 < moy);
61 unsigned const m = moy + (9 < moy ? -9 : 3);
62 unsigned const d = doy - (153 * moy + 2) / 5 + 1;
63 unsigned const minutes =
static_cast<unsigned>(div_day.
rem) / 60;
64 unsigned const ss = div_day.
rem % 60;
65 unsigned const hh = minutes / 60;
66 unsigned const mm = minutes % 60;
67 const char* date_time_format;
70 date_time_format =
"%04lld-%02u-%02uT%02u:%02u:%02u";
72 date_time_format =
"%04lld-%02u-%02uT%02u:%02u:%02uZ";
75 date_time_format =
"%04lld-%02u-%02u %02u:%02u:%02u";
77 int const len = snprintf(buf, max, date_time_format, y, m, d, hh, mm, ss);
78 if (0 <= len && static_cast<size_t>(len) < max) {
80 auto precision_format = use_iso_format ?
".%0*dZ" :
".%0*d";
81 int const len_frac = snprintf(buf + len,
85 static_cast<int>(div_hip.
rem));
86 if (0 <= len_frac && static_cast<size_t>(len + len_frac) < max) {
87 return static_cast<size_t>(len + len_frac);
90 return static_cast<size_t>(len);
96 size_t formatHMS(
char* buf,
size_t const max, int64_t
const unixtime) {
97 unsigned const seconds =
static_cast<unsigned>(
unsignedMod(unixtime, 24 * 60 * 60));
98 unsigned const minutes = seconds / 60;
99 unsigned const ss = seconds % 60;
100 unsigned const hh = minutes / 60;
101 unsigned const mm = minutes % 60;
102 int const len = snprintf(buf, max,
"%02u:%02u:%02u", hh, mm, ss);
103 if (0 <= len && static_cast<size_t>(len) < max) {
104 return static_cast<size_t>(len);
115 const auto len =
shared::formatHMS(iso_str.data(), iso_str.length() + 1, unix_time);
123 CHECK_GT(len, static_cast<size_t>(0));
130 iso_str.resize(18 + 1 + 8 +
bool(precision) + precision + 1);
132 iso_str.data(), iso_str.length() + 1, unix_time, precision,
true);
133 CHECK_GT(len, static_cast<size_t>(0));
142 static_assert(
sizeof(item_1) +
sizeof(item_2) <=
sizeof(
size_t));
143 return (static_cast<size_t>(item_1) << (8 *
sizeof(item_2))) |
144 (
static_cast<size_t>(item_2));
std::string convert_temporal_to_iso_format(const SQLTypeInfo &type_info, int64_t unix_time)
Constants for Builtin SQL Types supported by HEAVY.AI.
HOST DEVICE SQLTypes get_type() const
size_t formatHMS(char *buf, size_t const max, int64_t const unixtime)
std::string toString() const
int get_precision() const
size_t formatDate(char *buf, size_t const max, int64_t const unixtime)
uint64_t unsignedMod(int64_t num, int64_t den)
size_t formatDateTime(char *buf, size_t const max, int64_t const timestamp, int const dimension, bool use_iso_format)
size_t compute_hash(int32_t item_1, int32_t item_2)
DivUMod divUMod(int64_t num, int64_t den)