2014-06-11 50 views
4

我有一个来自mysql的日期时间。我需要提取每个部分:解析yyyy-MM-dd HH:mm:ss日期时间字符串?

int year; 
int month; 
int day; 
int hour; 
int min; 
int sec; 

例如:

2014-06-10 20:05:57 

是否有一个不是通过字符串流运行它为每个组件更简单的方法? (请勿使用boost或C++ 11解决方案)。

感谢

+0

请注意,您几乎可以肯定要解析“yyyy-MM-dd HH:mm:ss”。 –

+0

当你最后一句话。我就像“'std :: get_time'!'std :: get_time'!'std :: get_time'!Aww废话!” – chris

+0

不,我问如何在C++中给出std字符串日期时间 – jmasterx

回答

7

sscanf()可能是最直接的选择。这是一个C库函数,所以纯粹主义者可能会拒绝它。

下面是一个例子:

int year; 
int month; 
int day; 
int hour; 
int min; 
int sec; 

const char * str = "2014-06-10 20:05:57"; 

if (sscanf(str, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &min, &sec) == 6) 
{ 
    // sscanf() returns the number of elements scanned, so 6 means the string had all 6 elements. 
    // Else it was probably malformed. 
} 

And here is a live test

另一个不错的解决方案也将使用C++11 regex这将使一个更强大的字符串解析。

+0

容易出现轻微偏差格式:/ ... –

+0

@πάνταῥεῖ:OP已经声明格式是固定宽度。 – DavidO

+0

@πάνταῥεῖ是的,但如果OP想要处理很多格式,我相信他会考虑C++ 11或任何可以帮助解决这个问题的boost函数。 –