642 buf = palloc(MAXDATELEN + 1);
651 date = DatumGetDateADT(
value);
654 if (DATE_NOT_FINITE(date))
655 EncodeSpecialDate(date, buf);
658 j2date(date + POSTGRES_EPOCH_JDATE,
659 &(tm.tm_year), &(tm.tm_mon), &(tm.tm_mday));
660 EncodeDateOnly(&tm, USE_XSD_DATES, buf);
666 TimeADT time = DatumGetTimeADT(
value);
673 EncodeTimeOnly(tm, fsec,
false, 0, USE_XSD_DATES, buf);
678 TimeTzADT *time = DatumGetTimeTzADTP(
value);
686 EncodeTimeOnly(tm, fsec,
true, tz, USE_XSD_DATES, buf);
695 timestamp = DatumGetTimestamp(
value);
697 if (TIMESTAMP_NOT_FINITE(timestamp))
698 EncodeSpecialTimestamp(timestamp, buf);
699 else if (timestamp2tm(timestamp, NULL, &tm, &fsec, NULL, NULL) == 0)
700 EncodeDateTime(&tm, fsec,
false, 0, NULL, USE_XSD_DATES, buf);
703 (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
704 errmsg(
"timestamp out of range")));
709 TimestampTz timestamp;
713 const char *tzn = NULL;
715 timestamp = DatumGetTimestampTz(
value);
717 if (TIMESTAMP_NOT_FINITE(timestamp))
718 EncodeSpecialTimestamp(timestamp, buf);
719 else if (timestamp2tm(timestamp, &tz, &tm, &fsec, &tzn, NULL) == 0)
720 EncodeDateTime(&tm, fsec,
true, tz, tzn, USE_XSD_DATES, buf);
723 (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),
724 errmsg(
"timestamp out of range")));
728 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)