1

ある日付のタイムスタンプを取得しようとしています。現在、関数を使用しています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

誰かが私が間違っていることを教えてもらえますか?

4

1 に答える 1

4

time間違って使用しています。

関数のリファレンスを参照してくださいtime。パラメータがでない場合は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

于 2013-03-06T03:59:39.663 に答える