C++でuint
unixタイムスタンプを取得するにはどうすればよいですか?私は少しグーグルで調べましたが、ほとんどの方法は時間を表すより複雑な方法を探しているようです。 uint
として取得することはできませんか?
#include<iostream>
#include<ctime>
int main()
{
std::time_t t = std::time(0); // t is an integer type
std::cout << t << " seconds since 01-Jan-1970\n";
return 0;
}
最も一般的なアドバイスは間違っています。time()
だけに頼ることはできません。これは相対的なタイミングに使用されます。ISOC++は1970-01-01T00:00Z
がtime_t(0)
であることを指定していません
さらに悪いことに、あなたはそれを簡単に理解することもできません。確かに、gmtime
でtime_t(0)
のカレンダー日付を見つけることができますが、それが2000-01-01T00:00Z
の場合はどうしますか? 1970-01-01T00:00Z
と2000-01-01T00:00Z
の間には何秒ありましたか?うるう秒のため、確かに60の倍数ではありません。
#include <iostream>
#include <sys/time.h>
using namespace std;
int main ()
{
unsigned long int sec= time(NULL);
cout<<sec<<endl;
}
Windowsは異なるエポックと時間単位を使用します: nix/LinuxでWindowsファイル時間を秒に変換する を参照してください
Windowsでstd :: time()が返すものは(まだ)私には不明です(;-))
詳細を含むグローバル定義を作成しました:
#include <iostream>
#include <ctime>
#include <iomanip>
#define INFO std::cout << std::put_time(std::localtime(&time_now), "%y-%m-%d %OH:%OM:%OS") << " [INFO] " << __FILE__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") >> "
#define ERROR std::cout << std::put_time(std::localtime(&time_now), "%y-%m-%d %OH:%OM:%OS") << " [ERROR] " << __FILE__ << "(" << __FUNCTION__ << ":" << __LINE__ << ") >> "
static std::time_t time_now = std::time(nullptr);
次のように使用します。
INFO << "Hello world" << std::endl;
ERROR << "Goodbye world" << std::endl;
サンプル出力:
16-06-23 21:33:19 [INFO] src/main.cpp(main:6) >> Hello world
16-06-23 21:33:19 [ERROR] src/main.cpp(main:7) >> Goodbye world
これらの行をヘッダーファイルに入れます。これはデバッグなどに非常に役立ちます。
これはグーグルでの最初の結果であり、C++ 11の答えはまだないので、std :: chronoを使用してこれを行う方法は次のとおりです。
#include <chrono>
...
using namespace std::chrono;
int64_t timestamp = duration_cast<milliseconds>(system_clock::now().time_since_Epoch()).count();
この答えはエポックが1970/1/1であることを保証するものではありませんが、実際にはそうである可能性が非常に高いことに注意してください。