diff options
-rw-r--r-- | src/libtracker-common/tracker-date-time.c | 15 |
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"); } |