生成错误的Unix时间戳

时间:2013-03-06 03:38:28

标签: c++ timestamp

我正在尝试获取某个日期的时间戳,目前我正在使用函数mktime(),但它正在生成当前日期的时间戳,而不是我输入的日期。这是代码:

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

long long unixTimeStamp(
    int year,
    int month,
    int day,
    int hour,
    int min,
    int sec
  ) {

  tm uts_time;
  uts_time.tm_year = year - 1900;
  uts_time.tm_mon = month - 1;
  uts_time.tm_mday = day;
  uts_time.tm_sec = sec;
  uts_time.tm_min = min;
  uts_time.tm_hour = hour;

  time_t out = mktime(&uts_time);

  return time(&out);
}

int main() {
  cout << unixTimeStamp(2010,8,29,1,22,9) << endl;
  return 0;
}

输出:

1362541046

有人可以告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:4)

您错误地使用了time

time功能查看reference。如果参数不是NULL,则会将其设置为当前日历时间。

移除对time(&out)的来电,然后按原样返回out

time_t unixTimeStamp(
    int year,
    int month,
    int day,
    int hour,
    int min,
    int sec
  ) 
{

  tm uts_time;
  uts_time.tm_year = year - 1900;
  uts_time.tm_mon = month - 1;
  uts_time.tm_mday = day;
  uts_time.tm_sec = sec;
  uts_time.tm_min = min;
  uts_time.tm_hour = hour;

  return mktime(&uts_time);
}

int main() {
  cout << unixTimeStamp(2010,8,29,1,22,9) << endl;
  return 0;
}

输出:

  

1283008929