/*
* Stopgap implementation of timestamptz_to_str that doesn't depend on backend
- * infrastructure.
+ * infrastructure. This will work for timestamps that are within the range
+ * of the platform time_t type. (pg_time_t is compatible except for possibly
+ * being wider.)
+ *
+ * XXX the return value points to a static buffer, so beware of using more
+ * than one result value concurrently.
*
* XXX: The backend timestamp infrastructure should instead be split out and
- * moved into src/common.
+ * moved into src/common. That's a large project though.
*/
const char *
timestamptz_to_str(TimestampTz dt)
{
static char buf[MAXDATELEN + 1];
- static char ts[MAXDATELEN + 1];
- static char zone[MAXDATELEN + 1];
- pg_time_t result = timestamptz_to_time_t(dt);
+ char ts[MAXDATELEN + 1];
+ char zone[MAXDATELEN + 1];
+ time_t result = (time_t) timestamptz_to_time_t(dt);
struct tm *ltime = localtime(&result);
- strftime(ts, sizeof(zone), "%Y-%m-%d %H:%M:%S", ltime);
+ strftime(ts, sizeof(ts), "%Y-%m-%d %H:%M:%S", ltime);
strftime(zone, sizeof(zone), "%Z", ltime);
#ifdef HAVE_INT64_TIMESTAMP
- sprintf(buf, "%s.%06d %s", ts, (int)(dt % USECS_PER_SEC), zone);
+ sprintf(buf, "%s.%06d %s", ts, (int) (dt % USECS_PER_SEC), zone);
#else
sprintf(buf, "%s.%.6f %s", ts, fabs(dt - floor(dt)), zone);
#endif