time: normalize GetNetworkTime() response to local time + timezone info (bgo #697372)

The GetNetworkTime() response is defined to be an ISO8601 string, which
is in turn defined to be in local time.  Make sure that's reflected in
the documentation, and append the timezone offset to UTC where we have
it.

Oddly, Icera devices return their time info in UTC with an offset to
the local timezone, so we have to jump through some hoops there to
convert the response to localtime based on the reported offset.

Some additional fixes by Aleksander Morgado <aleksander@lanedo.com>.

https://bugzilla.gnome.org/show_bug.cgi?id=697372
This commit is contained in:
Dan Williams
2013-04-24 14:46:23 -05:00
parent 7d3a4aba4f
commit 2e8866c8b7
6 changed files with 112 additions and 42 deletions

View File

@@ -216,6 +216,38 @@ mm_filter_current_bands (const GArray *supported_bands,
/*****************************************************************************/
gchar *
mm_new_iso8601_time (guint year,
guint month,
guint day,
guint hour,
guint minute,
guint second,
gboolean have_offset,
gint offset_minutes)
{
GString *str;
str = g_string_sized_new (30);
g_string_append_printf (str, "%04d-%02d-%02dT%02d:%02d:%02d",
year, month, day, hour, minute, second);
if (have_offset) {
if (offset_minutes >=0 ) {
g_string_append_printf (str, "+%02d:%02d",
offset_minutes / 60,
offset_minutes % 60);
} else {
offset_minutes *= -1;
g_string_append_printf (str, "-%02d:%02d",
offset_minutes / 60,
offset_minutes % 60);
}
}
return g_string_free (str, FALSE);
}
/*****************************************************************************/
/* +CREG: <stat> (GSM 07.07 CREG=1 unsolicited) */
#define CREG1 "\\+(CREG|CGREG|CEREG):\\s*0*([0-9])"