681 buf = palloc(MAXDATELEN + 1);
690 date = DatumGetDateADT(
value);
693 if (DATE_NOT_FINITE(date))
694 EncodeSpecialDate(date, buf);
697 j2date(date + POSTGRES_EPOCH_JDATE,
698 &(tm.tm_year), &(tm.tm_mon), &(tm.tm_mday));
699 EncodeDateOnly(&tm, USE_XSD_DATES, buf);
705 TimeADT time = DatumGetTimeADT(
value);
712 EncodeTimeOnly(tm, fsec,
false, 0, USE_XSD_DATES, buf);
717 TimeTzADT *time = DatumGetTimeTzADTP(
value);
725 EncodeTimeOnly(tm, fsec,
true, tz, USE_XSD_DATES, buf);
734 timestamp = DatumGetTimestamp(
value);
736 if (TIMESTAMP_NOT_FINITE(timestamp))
737 EncodeSpecialTimestamp(timestamp, buf);
738 else if (timestamp2tm(timestamp, NULL, &tm, &fsec, NULL, NULL) == 0)
739 EncodeDateTime(&tm, fsec,
false, 0, NULL, USE_XSD_DATES, buf);
742 (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
743 errmsg(
"timestamp out of range")));
748 TimestampTz timestamp;
752 const char *tzn = NULL;
754 timestamp = DatumGetTimestampTz(
value);
756 if (TIMESTAMP_NOT_FINITE(timestamp))
757 EncodeSpecialTimestamp(timestamp, buf);
758 else if (timestamp2tm(timestamp, &tz, &tm, &fsec, &tzn, NULL) == 0)
759 EncodeDateTime(&tm, fsec,
true, tz, tzn, USE_XSD_DATES, buf);
762 (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
763 errmsg(
"timestamp out of range")));
767 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)