static Datum Timestamp_coerceObjectTZ_dd(Type self, jobject jts, bool tzAdjust) { double ts; jlong mSecs = JNI_callLongMethod(jts, s_Timestamp_getTime); jint nSecs = JNI_callIntMethod(jts, s_Timestamp_getNanos); ts = ((double)mSecs) / 1000.0; /* Convert to seconds */ ts -= EPOCH_DIFF; if(nSecs != 0) ts += ((double)nSecs) / 1000000000.0; /* Convert to seconds */ if(tzAdjust) ts -= Timestamp_getTimeZone_dd(ts); /* Adjust from UTC to local time */ return Float8GetDatum(ts); }
static Datum Timestamp_coerceObjectTZ_id(Type self, jobject jts, bool tzAdjust) { int64 ts; jlong mSecs = JNI_callLongMethod(jts, s_Timestamp_getTime); jint nSecs = JNI_callIntMethod(jts, s_Timestamp_getNanos); mSecs -= ((jlong)EPOCH_DIFF) * 1000L; ts = mSecs * 1000L; /* Convert millisecs to microsecs */ if(nSecs != 0) ts += nSecs / 1000; /* Convert nanosecs to microsecs */ if(tzAdjust) ts -= ((jlong)Timestamp_getTimeZone_id(ts)) * 1000000L; /* Adjust from UTC to local time */ return Int64GetDatum(ts); }
static Datum _Integer_coerceObject(Type self, jobject intObj) { return Int32GetDatum(intObj == 0 ? 0 : JNI_callIntMethod(intObj, s_Integer_intValue)); }