读书人

怎么求和当前时间和已知的另一时间的时

发布时间: 2012-02-09 18:22:27 作者: rapoo

如何求和当前时间和已知的另一时间的时间差?
time_t 可以得到当前时间代表的秒;
struct tm 可以得到当前日期;
time_t,struct tm可以互相转换.

主要问题:现在不知道如何表示令一已知时间(字符串表示,格式可以自己规定)的time_t.这样就可以求差,知道秒数差了.

次要问题:但是struct_tm里面的定义都要自己设置么?还是只要设置年月日小时分秒?
如何可以把他和一个字符串表示的日期联系一起?

[解决办法]
你可以计算当前时间和 epoch 的时间差,
再计算另一时间和 epoch 的时间差,
两者相减, 得到时间差(秒).


[解决办法]
使作tm struct设置时间时,除了年月日时分秒,一般把其它的都置成0就OK了。
偶一般都是这样:
struct tm time_struct;
memset(&time_struct, 0, sizeof(time_struct));
然后设置年月日时分秒。
[解决办法]
还是写个例子吧,以下程序计算当前时间距离2006-6-1午时的天数:

#include <iostream>
#include <ctime>
#include <cstring>
using namespace std;

struct tm make_tm(int year, int month, int day, int hour = 0, int minute = 0, int second = 0);

// 计算当前时间距离2000年6月1日正晌的天数:
int main() {
struct tm start = make_tm(2006, 6, 1, 12);
time_t start_t = mktime(&start);
time_t span = time(0) - start_t;

int days = (int)(span / (24 * 60 * 60));
cout < < "At least " < < days < < " days parsed since that time. " < < endl;
return 0;
}

struct tm make_tm(int year, int month, int day, int hour, int minute, int second) {
struct tm t;
memset(&t, 0, sizeof(tm));
t.tm_year = year - 1900;
t.tm_mon = month - 1;
t.tm_mday = day;
t.tm_hour = hour;
t.tm_min = minute;
t.tm_sec = second;

return t;
}
[解决办法]
主要问题 将字符串解析成年月日时分秒,赋值给tm 然后mktime成time_t
两者相减得到秒差

次要问题:只要赋予年月日时分秒就可以正确使用tm
[解决办法]
参看如上几个函数完成你需要的功能,
比如可以计算 给定时间和格林威治时间1970年1月1日凌晨 差距的秒数,
然后就可以使用 localtime() 把这个秒数换算为一个 struct tm
或者char *ctime(long *clock) 换算为一个标准字符串,
然后再变换格式比较

读书人网 >C++

热点推荐