uint64_t timestamp_nanoseconds = 634019142119225390;
time_t result = timestamp_nanoseconds/1000000000;
struct tm * timeinfo = gmtime(&result);
struct tm dateInfo ;
dateInfo.tm_mday = timeinfo->tm_mday ;
dateInfo.tm_mon = timeinfo->tm_mon ;
dateInfo.tm_year = timeinfo->tm_year ;
dateInfo.tm_hour = 0 ;
dateInfo.tm_min = 0 ;
dateInfo.tm_sec = 0 ;
time_t NoOfSecInDate = mktime (&dateInfo);
入力タイムスタンプ(ナノ秒単位)から、dateInfo構造体に設定されたコードのように日付を取得できます。その時点から、入力日付の真夜中から経過時間を秒単位で見つける必要があります。C++のmktimeに替わる
1970年1月1日から経過時間がナノ秒単位で入力されます。たとえば、634019142119225390と言ってください。時刻を00:00:00に設定してから、経過時間を符号なし整数で表す必要があります1970年1月1日のUnixエポック00:00 UTCからの経過時間(ナノ秒単位)。
解決策は、指定されたタイムスタンプで、現在の日付ではありません。この上記のコードで
、我々ははmktime関数は時間がたくさんあると
を期待されていない完了するまでに約64マイクロ秒かかることがわかりますが返す同じ結果を達成機能をはmktimeするために、他の選択肢を持っていますかエポックからの経過時間を秒単位で表したものですが、時間はそれほどありません。
私は理解できません - あなたはtime_tで始まり、tmに入れてから、mktimeを使って、あなたが始めた情報からtime_tを得るのですか?なぜ、あなたが始めなければならなかった 'result' time_tを使用しないのですか? – doctorlove