2014-06-11 73 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函數。 –