-rw-r--r-- | lib/util.cc | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/lib/util.cc b/lib/util.cc index e5ca62d..ee75d29 100644 --- a/lib/util.cc +++ b/lib/util.cc @@ -116,11 +116,21 @@ namespace opkele { time_t w3c_to_time(const string& w) { + int fraction; struct tm tm_t; memset(&tm_t,0,sizeof(tm_t)); - if( + if( ( + sscanf( + w.c_str(), + "%04d-%02d-%02dT%02d:%02d:%02dZ", + &tm_t.tm_year,&tm_t.tm_mon,&tm_t.tm_mday, + &tm_t.tm_hour,&tm_t.tm_min,&tm_t.tm_sec + ) != 6 + ) && ( sscanf( w.c_str(), - "%04d-%02d-%02dT%02d:%02d:%02dZ", + "%04d-%02d-%02dT%02d:%02d:%02d.%03dZ", &tm_t.tm_year,&tm_t.tm_mon,&tm_t.tm_mday, - &tm_t.tm_hour,&tm_t.tm_min,&tm_t.tm_sec - ) != 6 ) + &tm_t.tm_hour,&tm_t.tm_min,&tm_t.tm_sec, + &fraction + ) != 7 + ) ) throw failed_conversion(OPKELE_CP_ "failed to sscanf()"); @@ -131,3 +141,3 @@ namespace opkele { throw failed_conversion(OPKELE_CP_ "failed to mktime()"); - return rv; + return rv-timezone; } |