9#include "postgresql_p.h"
13#include <datatype/timestamp.h>
15#include <utils/datetime.h>
18namespace kDB::Repository::DatabaseInterface::PostgreSQL::BinaryInterface
21 inline void 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);
70 inline int timestamp2tm(qint64 dt,
struct pg_tm* tm, fsec_t* fsec,
const char** tzn)
76 TMODULO(time, date, USECS_PER_DAY);
78 if(time < (qint64)(0))
80 time += USECS_PER_DAY;
85 date += POSTGRES_EPOCH_JDATE;
88 if(date < 0 || date > (qint64)INT_MAX)
91 j2date((
int)date, &tm->tm_year, &tm->tm_mon, &tm->tm_mday);
92 dt2time(time, &tm->tm_hour, &tm->tm_min, &tm->tm_sec, fsec);