Skip to content
Snippets Groups Projects
Commit 1418e6e0 authored by Tom Lane's avatar Tom Lane
Browse files

Clean up "stopgap" implementation of timestamptz_to_str().

Use correct type for "result", fix bogus strftime argument, don't use
unnecessary static variables, improve comments.

Andres Freund and Tom Lane
parent c153530d
No related branches found
No related tags found
No related merge requests found
......@@ -41,25 +41,30 @@ timestamptz_to_time_t(TimestampTz t)
/*
* 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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment