mirror of
https://github.com/Gnucash/gnucash.git
synced 2026-09-03 20:53:02 -05:00
Rewrite gnc_timespec_to_iso8601_buff to use g_date_time_format.
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@22611 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
+18
-37
@@ -1441,47 +1441,28 @@ gnc_iso8601_to_timespec_gmt(const char *str)
|
|||||||
char *
|
char *
|
||||||
gnc_timespec_to_iso8601_buff (Timespec ts, char * buff)
|
gnc_timespec_to_iso8601_buff (Timespec ts, char * buff)
|
||||||
{
|
{
|
||||||
int len, tz_hour, tz_min;
|
gchar *fmt1 = "%Y-%m-%d %H:%M", *fmt2 = "%s:%02d.%06d %s";
|
||||||
gint64 secs;
|
GDateTime *gdt;
|
||||||
char cyn;
|
gchar *time_base, *tz;
|
||||||
gint64 tmp;
|
|
||||||
struct tm parsed;
|
|
||||||
|
|
||||||
g_return_val_if_fail (buff != NULL, NULL);
|
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;
|
g_free (time_base);
|
||||||
gnc_localtime_r(&tmp, &parsed);
|
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
|
void
|
||||||
|
|||||||
Reference in New Issue
Block a user