-rw-r--r-- | lib/util.cc | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/util.cc b/lib/util.cc index e5ca62d..ee75d29 100644 --- a/lib/util.cc +++ b/lib/util.cc @@ -115,7 +115,8 @@ 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(), @@ -123,5 +124,14 @@ namespace opkele { &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 ) + ) != 6 + ) && ( + sscanf( + w.c_str(), + "%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, + &fraction + ) != 7 + ) ) throw failed_conversion(OPKELE_CP_ "failed to sscanf()"); tm_t.tm_mon--; @@ -130,5 +140,5 @@ namespace opkele { if(rv==(time_t)-1) throw failed_conversion(OPKELE_CP_ "failed to mktime()"); - return rv; + return rv-timezone; } |