9#include "postgresql_p.h"
12#include <datatype/timestamp.h>
14#include <utils/datetime.h>
17namespace kDB::Repository::DatabaseInterface::PostgreSQL::BinaryInterface
21 j2date(
int jd,
int *year,
int *month,
int *day)
30 quad = julian / 146097;
31 extra = (julian - quad * 146097) * 4 + 3;
32 julian += 60 + quad * 3 + extra / 146097;
34 julian -= quad * 1461;
35 y = julian * 4 / 1461;
36 julian = ((y != 0) ? (julian + 305) % 365 : (julian + 306) % 366) + 123;
39 quad = julian * 2141 / 65536;
40 *day = julian - 7834 * quad / 256;
41 *month = (quad + 10) % 12 + 1;
46 inline void dt2time(
double jd,
int *hour,
int *min,
int *sec, fsec_t *fsec)
51 *hour = time / USECS_PER_HOUR;
52 time -= (*hour) * USECS_PER_HOUR;
53 *min = time / USECS_PER_MINUTE;
54 time -= (*min) * USECS_PER_MINUTE;
55 *sec = time / USECS_PER_SEC;
56 *fsec = time - (*sec * USECS_PER_SEC);
71 timestamp2tm(qint64 dt,
struct pg_tm * tm, fsec_t *fsec,
const char **tzn)
77 TMODULO(time, date, USECS_PER_DAY);
79 if (time < (qint64)(0))
81 time += USECS_PER_DAY;
86 date += POSTGRES_EPOCH_JDATE;
89 if (date < 0 || date > (qint64) INT_MAX)
92 j2date((
int) date, &tm->tm_year, &tm->tm_mon, &tm->tm_mday);
93 dt2time(time, &tm->tm_hour, &tm->tm_min, &tm->tm_sec, fsec);