From: Linus Torvalds Date: Fri, 2 Sep 2011 00:13:39 +0000 (-0700) Subject: Teach the date parser to also parse the international standard date format X-Git-Url: http://git.tdb.fi/?p=ext%2Fsubsurface.git;a=commitdiff_plain;h=5001ab66cba885411e9ee4e8c701688b4928ab1d Teach the date parser to also parse the international standard date format The standard way to write a date is yyyy-mm-dd, which is unambiguous and sorts correctly. We parsed that right in the 'datetime' case, but not in the normal date case. And we do want to use that in our output format, exactly because it's standard. And also parse 'duration' for the dive duration. It's what we use when saving, it just so happened that we ended up not parsing it right, but then picking it up from the samples instead. Signed-off-by: Linus Torvalds --- diff --git a/parse-xml.c b/parse-xml.c index ea568f7..6c93ad1 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -106,14 +106,25 @@ static void divedate(char *buffer, void *_when) { int d,m,y; time_t *when = _when; + int success = 0; + success = tm.tm_sec | tm.tm_min | tm.tm_hour; if (sscanf(buffer, "%d.%d.%d", &d, &m, &y) == 3) { tm.tm_year = y; tm.tm_mon = m-1; tm.tm_mday = d; - if (tm.tm_sec | tm.tm_min | tm.tm_hour) - *when = utc_mktime(&tm); + } else if (sscanf(buffer, "%d-%d-%d", &y, &m, &d) == 3) { + tm.tm_year = y; + tm.tm_mon = m-1; + tm.tm_mday = d; + } else { + fprintf(stderr, "Unable to parse date '%s'\n", buffer); + success = 0; } + + if (success) + *when = utc_mktime(&tm); + free(buffer); } @@ -396,6 +407,8 @@ static void try_to_fill_dive(struct dive *dive, const char *name, char *buf) return; if (MATCH(".meandepth", depth, &dive->meandepth)) return; + if (MATCH(".duration", duration, &dive->duration)) + return; if (MATCH(".divetime", duration, &dive->duration)) return; if (MATCH(".divetimesec", duration, &dive->duration))