2011-05-25 94 views
0

我想將日期/時間字符串(例如1/08/1957/11:20:01或任何類型的時間格式)分成月,小時,秒,分鐘。問題是,首先我不知道如何定義可以拆分的時間類型。如何在C++中分割日期/時間?

我應該寫:

time_t now=1081987112001 s; //it is not correct. why? what's the c++ time data format? 
struct tm* tm = localtime(&now); 

cout << "Today is " 
    << tm->tm_mon+1 // month 
    << "/" << tm->tm_mday // day 
    << "/" << tm->tm_year + 1900 // year with century 
    << " " << tm->tm_hour // hour 
    << ":" << tm->tm_min // minute 
    << ":" << tm->tm_sec; // second 

但它是不正確的。有人可以給我一個方法,從鍵盤給予一個時間值並分割它的例子嗎?

C++可以接受什麼類型的數據時間格式?

+0

你真的意味着「數據時間」或「日期和時間」? – 2011-05-25 14:54:04

+0

數據和時間。你能幫忙嗎? – marryy 2011-05-25 14:56:38

+0

我很確定你的意思是「日期」,而不是「數據」。 – 2011-05-25 14:57:47

回答

0
#include <cstdio> 
#include <iostream> 
#include <string> 
... 
{ 
    std::string date_time; 
    std::getline(std::cin, date_time); 
    sscanf(date_time.c_str(), "%d/%d/%d/%d:%d:%d", &month, &date, &year, &hour, &minute, &second); 
} 
+0

這是一個人可以發送數據和時間的唯一方式嗎?如果他發送yyyy.month.day.hour怎麼辦? – marryy 2011-05-25 14:58:47

+0

@marryy:沒有。有很多方法。 – 2011-05-25 14:59:45

+0

:)所以我想必須有一些東西,可以採取任何價值作爲數據/時間價值,如果它是正確的,然後它分裂成小時,秒等等,不是? – marryy 2011-05-25 15:01:04

1

time_t是整數並計數的從unix新紀元經過的秒數:1970年1月,00:00:00第一。您明確無法寫出您爲分配此值所做的操作。

你要使用的功能localtimegmtime到方便time_t值和struct tm有日,月,小時的各種信息之間的轉換等

您還可以使用strftimestrptime功能在字符串和struct tm之間進行轉換。

+0

「BOT」?!該日期被稱爲UNIX紀元。 – 2011-05-25 14:58:15

+0

我通常稱它爲BOT,用於開始時間。好的,我會改變它。 – 2011-05-25 14:59:14

+0

這幾乎不是時間的開始! – 2011-05-25 14:59:55

3

如果你希望花時間從用戶輸入(這是什麼,似乎像你想),並轉換到這有效struct tm,您可以使用time.h發現strptime()

因此,舉例來說,如果你有:

char user_input_time[] = "25 May 2011 10:15:45"; 

struct tm; 
strptime(user_input_time, "%d %b %Y %H:%M:%S", &tm); 

printf("year: %d; month: %d; day: %d;\n", tm.tm_year, tm.tm_mon, tm.tm_mday); 
+0

strptime()不在標準庫中。請參閱http://stackoverflow.com/questions/321849/strptime-equivalent-on-windows – 2011-05-25 15:04:40

+0

不,不幸的是它不是...這是一個POSIX函數。但是,感謝您鏈接到該功能的更便攜版本......這絕對有幫助。 – Jason 2011-05-25 18:11:15