summaryrefslogtreecommitdiff
path: root/src/libtracker-common
diff options
context:
space:
mode:
authorCarlos Garnacho <carlosg@gnome.org>2019-03-03 18:24:48 +0100
committerCarlos Garnacho <carlosg@gnome.org>2019-09-10 00:22:57 +0200
commit5ce5b7b3046de53ab59fa7848c11a40c2b79372a (patch)
tree96de1e057e8225a6b96c94c5eae319ef9982b478 /src/libtracker-common
parentb56b49d5fd26de3ce866e586ce1190813b2999fe (diff)
downloadtracker-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.c27
-rw-r--r--src/libtracker-common/tracker-date-time.h3
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