647 buf = palloc(MAXDATELEN + 1);
656 date = DatumGetDateADT(
value);
659 if (DATE_NOT_FINITE(date))
660 EncodeSpecialDate(date, buf);
663 j2date(date + POSTGRES_EPOCH_JDATE,
664 &(tm.tm_year), &(tm.tm_mon), &(tm.tm_mday));
665 EncodeDateOnly(&tm, USE_XSD_DATES, buf);
671 TimeADT time = DatumGetTimeADT(
value);
678 EncodeTimeOnly(tm, fsec,
false, 0, USE_XSD_DATES, buf);
683 TimeTzADT *time = DatumGetTimeTzADTP(
value);
691 EncodeTimeOnly(tm, fsec,
true, tz, USE_XSD_DATES, buf);
700 timestamp = DatumGetTimestamp(
value);
702 if (TIMESTAMP_NOT_FINITE(timestamp))
703 EncodeSpecialTimestamp(timestamp, buf);
704 else if (timestamp2tm(timestamp, NULL, &tm, &fsec, NULL, NULL) == 0)
705 EncodeDateTime(&tm, fsec,
false, 0, NULL, USE_XSD_DATES, buf);
708 (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
709 errmsg(
"timestamp out of range")));
714 TimestampTz timestamp;
718 const char *tzn = NULL;
720 timestamp = DatumGetTimestampTz(
value);
722 if (TIMESTAMP_NOT_FINITE(timestamp))
723 EncodeSpecialTimestamp(timestamp, buf);
724 else if (timestamp2tm(timestamp, &tz, &tm, &fsec, &tzn, NULL) == 0)
725 EncodeDateTime(&tm, fsec,
true, tz, tzn, USE_XSD_DATES, buf);
728 (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
729 errmsg(
"timestamp out of range")));
733 elog(ERROR,
"unknown jsonb value datetime type oid %d", typid);
static int postgis_timetz2tm(TimeTzADT *time, struct pg_tm *tm, fsec_t *fsec, int *tzp)
static int postgis_time2tm(TimeADT time, struct pg_tm *tm, fsec_t *fsec)