2014-12-06 49 views
0

我试图从给定的有效小时和分钟中获得从时代(1970年1月1日)开始的秒数。C++自从具有给定小时和分钟的时代以来的秒数

假设给定的小时数是10,给定的分钟数是30,这意味着它是上午10:30。还假定它是在今天的日期。这意味着它将会是:

2014 12月6日上午10时30分00秒

我怎样才能得到的秒数从划时代上述日期?

我试过以下,但我得到-1作为我的结果。

time_t now = time(0); 
tm *ltm = gmtime(&now); 

struct tm t; 
t.tm_year = 1900 + ltm->tm_year; 
t.tm_mon = 1 + ltm->tm_mon; 
t.tm_mday = ltm->tm_mday; 
t.tm_hour = 10; 
t.tm_min = 30; 
t.tm_sec = 0; 
time_t timeSinceEpoch = mktime(&t); 

timeSinceEpoch返回-1。这是为什么?

回答

4

可以使用mktime()像下面

time_t t = time(NULL); 
tm* timePtr = localtime(&t);//Getting current time. 

struct tm t = {0};    // Initalize to all 0's 
t.tm_year = timePtr->tm_year; // This is year- 114 (1900+114=2014) 
t.tm_mon = timePtr->tm_mon; //Current Month 
t.tm_mday = timePtr->tm_mday; //Today's date 
t.tm_hour = 10;    //Time you need (10) 
t.tm_min = 30;     //Minutes you need (30) 
t.tm_sec = timePtr->tm_sec; //Current second 
time_t timeSinceEpoch = mktime(&t); 
+0

我想从系统中得到的年,月,日来代替。只有小时,分钟和秒字段通过变量设置。我可以知道为什么tm_year = 114? – Wallace 2014-12-06 11:28:05

+0

@Wallace ::我编辑了代码以满足您的需求。另请注意,tm_year将是1900年以来的年份。 – 2014-12-06 11:47:29

+0

谢谢。作为我的结果,我得到了1417833000。它是否正确?有没有办法来验证结果?顺便说一句,我正在使用gmtime。 gmtime和localtime有区别吗?我的时区是GMT + 8。 – Wallace 2014-12-06 11:59:53

相关问题