By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
449,412 Members | 1,006 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 449,412 IT Pros & Developers. It's quick & easy.

parsing string with std::stringstream

P: n/a
Does *ANYONE* in here know how I may parse the various date/time
'elements' from a string?. The input string has the ff format:

'YYYY-MM-DD HH:MM:SS AM'

Jul 18 '07 #1
Share this Question
Share on Google+
7 Replies


P: n/a
"Grey Alien" <gr**@andromeda.comwrote in message
news:Hs******************************@bt.com...
Does *ANYONE* in here know how I may parse the various date/time
'elements' from a string?. The input string has the ff format:

'YYYY-MM-DD HH:MM:SS AM'
There were 2 replies, one of mine included, to your previous post showing
how to parse this string using std::stringstream. Did you not read the
replies, or did you not like them?
Jul 18 '07 #2

P: n/a


Jim Langston wrote:
"Grey Alien" <gr**@andromeda.comwrote in message
news:Hs******************************@bt.com...
>>Does *ANYONE* in here know how I may parse the various date/time
'elements' from a string?. The input string has the ff format:

'YYYY-MM-DD HH:MM:SS AM'


There were 2 replies, one of mine included, to your previous post showing
how to parse this string using std::stringstream. Did you not read the
replies, or did you not like them?

Apologies - my original post (and any subsequent replies) for some
reason - did not show up on my newsreader. Hence my repost yesterday. I
did not get any reply yesterday to my repost - hence this post today.
Could you kindly post your soln to this thread - I don't understand why
the other posts did not appear. tx
Jul 18 '07 #3

P: n/a

"Grey Alien" <gr**@andromeda.comwrote in message
news:D4******************************@bt.com...
>

Jim Langston wrote:
>"Grey Alien" <gr**@andromeda.comwrote in message
news:Hs******************************@bt.com...
>>>Does *ANYONE* in here know how I may parse the various date/time
'elements' from a string?. The input string has the ff format:

'YYYY-MM-DD HH:MM:SS AM'


There were 2 replies, one of mine included, to your previous post showing
how to parse this string using std::stringstream. Did you not read the
replies, or did you not like them?

Apologies - my original post (and any subsequent replies) for some
reason - did not show up on my newsreader. Hence my repost yesterday. I
did not get any reply yesterday to my repost - hence this post today.
Could you kindly post your soln to this thread - I don't understand why
the other posts did not appear. tx
"Erik Wikström" <Er***********@telia.comwrote in message
news:D2****************@newsb.telia.net...
On 2007-07-17 18:19, Grey Alien wrote:
>I want to parse the various time elements from a string. The input string
has the ff format:

'YYYY-MM-DD HH:MM:SS AM'

Can anyone show me how to do this?

This is the only way that I know of that don't require any extra
libraries/extensions:

#include <iostream>
#include <sstream>
#include <string>

template <class T>
T stoa(const std::string& s)
{
T t;
std::istringstream iss(s);
if (!(iss >t))
throw "Can't convert";
return t;
}

int main()
{
std::string input;
std::getline(std::cin, input);

int year, mon, day, hour, min, sec;

year = stoa<int>(input.substr(0, 4));
mon = stoa<int>(input.substr(5, 2));
day = stoa<int>(input.substr(8, 2));
hour = stoa<int>(input.substr(11, 2));
min = stoa<int>(input.substr(14, 2));
sec = stoa<int>(input.substr(17, 2));

if (input.substr(20, 2) == "PM")
hour += 12;
}

Don't forget to apply error checking
This works also, although you should throw in error checking.

#include <iostream>
#include <string>
#include <sstream>

int main()
{
std::cout << "Enter Date/Time format: YYYY-MM-DD HH:MM:SS AM: ";
std::string DateTime;
std::getline( std::cin, DateTime );

std::stringstream Stream( DateTime );
int Year, Month, Day, Hour, Minute, Second;
std::string AmPm;
char ThrowAway;
Stream >Year >ThrowAway >Month >ThrowAway >Day;
Stream >Hour >ThrowAway >Minute >ThrowAway >Second;
Stream >AmPm;

std::cout << Year << "-" << Month << "-" << Day << " " << Hour << ":" <<
Minute << ":" << Second << " " << AmPm;

}
Jul 18 '07 #4

P: n/a
Thanks Jim, I'll study the code and make any suitable
checks/modifications/error handling.
Jul 18 '07 #5

P: n/a

Grey Alien <gr**@andromeda.comwrote in message...
>
Apologies - my original post (and any subsequent replies) for some
reason - did not show up on my newsreader.
It's those dang iPhones screwing up the net!! <G>

Some ISPs are slow to propagate (and getting worse (spam filters, etc.)).

--
Bob R
POVrookie
Jul 18 '07 #6

P: n/a
On Jul 18, 8:25 am, Grey Alien <g...@andromeda.comwrote:
Does *ANYONE* in here know how I may parse the various date/time
'elements' from a string?. The input string has the ff format:

'YYYY-MM-DD HH:MM:SS AM'
Sure. Try something like this.

std::stringstream ss;
ss << "2007-07-19 11:18:01 AM";
int year, month, day, hour, min, sec;
char c;
ss >year >c >month >c >day >hour >c >min >c >>
sec;
std::cout << " " << year << " " << month << " " << day << " " <<
hour << " " << min << " " << sec;

Jul 19 '07 #7

P: n/a
On 18 Jul, 07:25, Grey Alien <g...@andromeda.comwrote:
Does *ANYONE* in here know how I may parse the various date/time
'elements' from a string?. The input string has the ff format:

'YYYY-MM-DD HH:MM:SS AM'
sscanf(myString.c_str(), "%4d-%2d-%2d %2d:%2d:%2d %s",
&year, &month, &day, &hour, &min, &sec, ampm_str);

Jul 19 '07 #8

This discussion thread is closed

Replies have been disabled for this discussion.