diff options
author | Carlos Garnacho <carlosg@gnome.org> | 2019-03-03 18:24:48 +0100 |
---|---|---|
committer | Carlos Garnacho <carlosg@gnome.org> | 2019-09-10 00:22:57 +0200 |
commit | 5ce5b7b3046de53ab59fa7848c11a40c2b79372a (patch) | |
tree | 96de1e057e8225a6b96c94c5eae319ef9982b478 /src/libtracker-common | |
parent | b56b49d5fd26de3ce866e586ce1190813b2999fe (diff) | |
download | tracker-5ce5b7b3046de53ab59fa7848c11a40c2b79372a.tar.gz |
libtracker-common: Add offset argument to tracker_date_to_string()
So that we can convert losslessly between time+offset and strings.
Diffstat (limited to 'src/libtracker-common')
-rw-r--r-- | src/libtracker-common/tracker-date-time.c | 27 | ||||
-rw-r--r-- | src/libtracker-common/tracker-date-time.h | 3 |
2 files changed, 23 insertions, 7 deletions
diff --git a/src/libtracker-common/tracker-date-time.c b/src/libtracker-common/tracker-date-time.c index e8279d728..162d9081a 100644 --- a/src/libtracker-common/tracker-date-time.c +++ b/src/libtracker-common/tracker-date-time.c @@ -201,14 +201,15 @@ tracker_string_to_date (const gchar *date_string, } gchar * -tracker_date_to_string (gdouble date_time) +tracker_date_to_string (gdouble date_time, + gint offset) { - gchar buffer[30]; + gchar buffer[35]; time_t seconds; gint64 total_milliseconds; gint milliseconds; struct tm utc_time; - size_t count; + size_t count, size; memset (buffer, '\0', sizeof (buffer)); memset (&utc_time, 0, sizeof (struct tm)); @@ -218,7 +219,7 @@ tracker_date_to_string (gdouble date_time) if (milliseconds < 0) { milliseconds += 1000; } - seconds = (time_t) ((total_milliseconds - milliseconds) / 1000); + seconds = (time_t) ((total_milliseconds - milliseconds) / 1000) + offset; gmtime_r (&seconds, &utc_time); /* Output is ISO 8601 format : "YYYY-MM-DDThh:mm:ss" */ @@ -226,11 +227,25 @@ tracker_date_to_string (gdouble date_time) /* Append milliseconds (if non-zero) and time zone */ if (milliseconds > 0) { - snprintf (buffer + count, sizeof (buffer) - count, ".%03dZ", milliseconds); + size = snprintf (buffer + count, sizeof (buffer) - count, ".%03d", milliseconds); + count += size; + } + + if (offset != 0) { + gint hours, mins; + + hours = ABS (offset) / 3600; + mins = (ABS (offset) % 3600) / 60; + size = snprintf (buffer + count, sizeof (buffer) - count, "%c%.2d:%.2d", + offset < 0 ? '-' : '+', + hours, mins); + count += size; } else { - buffer[count] = 'Z'; + buffer[count++] = 'Z'; } + g_assert (count <= sizeof (buffer)); + return count > 0 ? g_strdup (buffer) : NULL; } diff --git a/src/libtracker-common/tracker-date-time.h b/src/libtracker-common/tracker-date-time.h index 78b56eb1f..df949e90e 100644 --- a/src/libtracker-common/tracker-date-time.h +++ b/src/libtracker-common/tracker-date-time.h @@ -57,7 +57,8 @@ gint tracker_date_time_get_local_time (const GValue *value); gdouble tracker_string_to_date (const gchar *date_string, gint *offset, GError **error); -gchar * tracker_date_to_string (gdouble date_time); +gchar * tracker_date_to_string (gdouble date_time, + gint offset); G_END_DECLS |