C ++中时间戳和日期之间的转换

时间:2014-09-25 23:10:58

标签: c++

在我的程序中,我有一个unsigned long long int(称为unixutc),它存储一个unix时间戳(epoch:1970)。我想要做的是计算与相同日期/时间相对应的unsigned long long int,除了另一个给定年份(称为inyear,这是一个void *,输入为unsigned int *)。

我做了什么:

time_t utc = app->unixutc;
tm* convutc = new tm();
gmtime_s(convutc, &utc);

if (*(unsigned int*)inyear < 1970)
{
    convutc->tm_year = 70;
    convutc->tm_mon = 0;
    convutc->tm_mday = 1;
    convutc->tm_hour = 0;
    convutc->tm_min = 0;
    convutc->tm_sec = 0;

    convutc->tm_wday = 0;
    convutc->tm_yday = 0;
}
else
{
    convutc->tm_year = *(unsigned int*)inyear - 1900;
}
app->unixutc = mktime(convutc);

这根本不起作用。如果inyear小于1970年,则mktime返回-1(我不知道为什么,它不应该)。如果它大于~3000它返回-1(它不应该&#39; t我在VS2013中编译,我检查了标题,mktime返回一个time_t,这是__time64_t的typedef,这是一个typedef对于__int64这是一个很好的,胖的64位整数,应该可以容纳大约5840亿年的秒数。 另一个奇怪的事情是,如果inyear在1970年到3000年之间,它可以正常工作,除了它给出的时间短一个小时。

0 个答案:

没有答案