tags:

views:

62

answers:

3

Hi I need a procedure that convert string time to int. Which support all this formats under unix:

 "Wed, 09 Feb 1994 22:23:32 GMT"       -- HTTP format
 "Thu Feb  3 17:03:55 GMT 1994"        -- ctime(3) format
 "Thu Feb  3 00:00:00 1994",           -- ANSI C asctime() format
 "Tuesday, 08-Feb-94 14:15:29 GMT"     -- old rfc850 HTTP format
 "Tuesday, 08-Feb-1994 14:15:29 GMT"   -- broken rfc850 HTTP format

 "03/Feb/1994:17:03:55 -0700"   -- common logfile format
 "09 Feb 1994 22:23:32 GMT"     -- HTTP format (no weekday)
 "08-Feb-94 14:15:29 GMT"       -- rfc850 format (no weekday)
 "08-Feb-1994 14:15:29 GMT"     -- broken rfc850 format (no weekday)

 "1994-02-03 14:15:29 -0100"    -- ISO 8601 format
 "1994-02-03 14:15:29"          -- zone is optional
 "1994-02-03"                   -- only date
 "1994-02-03T14:15:29"          -- Use T as separator
 "19940203T141529Z"             -- ISO 8601 compact format
 "19940203"                     -- only date

 "08-Feb-94"         -- old rfc850 HTTP format    (no weekday, no time)
 "08-Feb-1994"       -- broken rfc850 HTTP format (no weekday, no time)
 "09 Feb 1994"       -- proposed new HTTP format  (no weekday, no time)
 "03/Feb/1994"       -- common logfile format     (no time, no offset)

 "Feb  3  1994"      -- Unix 'ls -l' format
 "Feb  3 17:03"      -- Unix 'ls -l' format

 "11-15-96  03:52PM" -- Windows 'dir' format 

Can you please advice something.

A: 

I'd take a strong look at Boost.Date_Time. Date-time input/output looks like what you want.

gregg
Ohhh, unfortunately I cannot use boost in my project. Just C++ and stl
Nikita
@Nikita: In that case, could you outline your restrictions in more detail? Nobody here is going to write a routine for you, and our best suggestions on how to code this aren't going to be better than what you can do, so the best thing is to recommend a third-party library. If you can't use a freely available third-party library with an extremely unrestrictive license, what can you use?
David Thornley
A: 

I'm not aware of any non-boost solution. You may have to fall back on istringstream and roll your own. It shouldn't be too difficult, just make sure to have a good set of test cases for the parser.

Mark B
A: 

Try the time_get facet class. The public functions

get_time
get_date
get_weekday
get_monthname
get_year 

return you date data and checking on the condition what format of date you want to display, you can display the date in that format accordingly.

DumbCoder