-3

年の初めから経過した秒数を計算する必要があります。私が見つけたすべての時間関数と少し混乱しています。

タイマー(1970年1月1日からの秒数を検索)を使用することを考えましたが、どうすればこれを続行できますか?

4

4 に答える 4

3

デフォルトでは、C++ は間違いなく醜いライブラリにしかアクセスできませ<ctime>んが、それでも問題を解決できます。

  1. (=ほぼ普遍的に、1970 年 1 月 1 日、つまり UNIX エポックから経過した秒数)timeとして現在の時刻を取得するために呼び出します。time_t
  2. struct tmを使用して、指定された時間を(さまざまな時間コンポーネント - 年、月、... - 分割を持つ構造)に変換しlocaltimeます。
  3. これを変更しstruct tmて、今年の初めに移動します。
  4. を呼び出して、指定された を amktimeに変換し直します。これで、現在の年の始まりがわかりました。struct tmtime_ttime_t
  5. time_tポイント 1 で取得した値からこの値を減算しdifftimeます。これで、年の初めから経過した秒数がわかりました。
于 2012-05-01T19:47:48.017 に答える
1

私はあなたが機能を意味していると思いますtime。はい、使用できます。より具体的には、次の点を見てください。

  • time(現在の時刻を返します)
  • localtime(現在の時刻を、年、月などをより簡単に利用できる形式にデコードします)
  • struct tm(localtime返ってくるもの)
  • mktimestruct tm( a から aに戻すtime_t)
  • difftimetime_t(2 つの の差を秒単位で計算します)。
于 2012-05-01T19:48:58.997 に答える
1
#include <ctime>

double seconds_since_year_began()
{
    time_t now = std::time(NULL);
    tm* tmp = std::localtime(&now);
    tm t = {0};
    t.tm_year = tmp->tm_year;
    return std::difftime(now, std::mktime(&t));
}
于 2012-05-01T19:52:46.143 に答える
0
#include <ctime>

ここで例を見てください:

http://www.cplusplus.com/reference/clibrary/ctime/mktime/

これを使用して、1 月 1 日の 0:00 の「エポックからの秒数」を取得し、 によって返される値から減算しますtime()

于 2012-05-01T19:50:42.070 に答える