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);