summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libtracker-common/tracker-date-time.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/libtracker-common/tracker-date-time.c b/src/libtracker-common/tracker-date-time.c
index bfc05c782..494b9f5cc 100644
--- a/src/libtracker-common/tracker-date-time.c
+++ b/src/libtracker-common/tracker-date-time.c
@@ -54,8 +54,17 @@ tracker_date_new_from_iso8601 (const gchar *string,
gchar *
tracker_date_format_iso8601 (GDateTime *datetime)
{
- if (g_date_time_get_utc_offset (datetime) == 0)
- return g_date_time_format (datetime, "%C%y-%m-%dT%TZ");
- else
+ gboolean has_offset, has_subsecond;
+
+ has_offset = g_date_time_get_utc_offset (datetime) != 0;
+ has_subsecond = g_date_time_get_microsecond (datetime) != 0;
+
+ if (has_offset && has_subsecond)
+ return g_date_time_format (datetime, "%C%y-%m-%dT%H:%M:%S.%f%:z");
+ else if (has_offset)
return g_date_time_format (datetime, "%C%y-%m-%dT%T%:z");
+ else if (has_subsecond)
+ return g_date_time_format (datetime, "%C%y-%m-%dT%H:%M:%S.%fZ");
+ else
+ return g_date_time_format (datetime, "%C%y-%m-%dT%TZ");
}