r22611 - gnucash/trunk/src/libqof/qof - Rewrite gnc_timespec_to_iso8601_buff to use g_date_time_format.
John Ralls
jralls at code.gnucash.org
Sat Dec 1 17:43:17 EST 2012
Author: jralls
Date: 2012-12-01 17:43:16 -0500 (Sat, 01 Dec 2012)
New Revision: 22611
Trac: http://svn.gnucash.org/trac/changeset/22611
Modified:
gnucash/trunk/src/libqof/qof/gnc-date.c
Log:
Rewrite gnc_timespec_to_iso8601_buff to use g_date_time_format.
Modified: gnucash/trunk/src/libqof/qof/gnc-date.c
===================================================================
--- gnucash/trunk/src/libqof/qof/gnc-date.c 2012-12-01 22:43:07 UTC (rev 22610)
+++ gnucash/trunk/src/libqof/qof/gnc-date.c 2012-12-01 22:43:16 UTC (rev 22611)
@@ -1441,47 +1441,28 @@
char *
gnc_timespec_to_iso8601_buff (Timespec ts, char * buff)
{
- int len, tz_hour, tz_min;
- gint64 secs;
- char cyn;
- gint64 tmp;
- struct tm parsed;
+ gchar *fmt1 = "%Y-%m-%d %H:%M", *fmt2 = "%s:%02d.%06d %s";
+ GDateTime *gdt;
+ gchar *time_base, *tz;
g_return_val_if_fail (buff != NULL, NULL);
+ gdt = gnc_g_date_time_new_from_timespec_local (ts);
+ g_return_val_if_fail (gdt != NULL, NULL);
+ time_base = g_date_time_format (gdt, fmt1);
+#ifdef G_OS_WIN32
+ tz = g_date_time_format (gdt, "%Z");
+#else
+ tz = g_date_time_format (gdt, "%z");
+#endif
+ snprintf (buff, MAX_DATE_LENGTH, fmt2, time_base,
+ g_date_time_get_second (gdt), g_date_time_get_microsecond (gdt),
+ tz);
- tmp = ts.tv_sec;
- gnc_localtime_r(&tmp, &parsed);
+ g_free (time_base);
+ g_free (tz);
+ g_date_time_unref (gdt);
+ return buff + strlen (buff);
- secs = gnc_timezone (&parsed);
-
- /* We also have to print the sign by hand, to work around a bug
- * in the glibc printf (where %+02d fails to zero-pad).
- */
- cyn = '-';
- if (0 > secs)
- {
- cyn = '+';
- secs = -secs;
- }
-
- tz_hour = secs / 3600;
- tz_min = (secs % 3600) / 60;
-
- len = sprintf (buff, "%4d-%02d-%02d %02d:%02d:%02d.%06ld %c%02d%02d",
- parsed.tm_year + 1900,
- parsed.tm_mon + 1,
- parsed.tm_mday,
- parsed.tm_hour,
- parsed.tm_min,
- parsed.tm_sec,
- ts.tv_nsec / 1000,
- cyn,
- tz_hour,
- tz_min);
-
- /* Return pointer to end of string. */
- buff += len;
- return buff;
}
void
More information about the gnucash-changes
mailing list