0

ブーストライブラリを使用して現在の時間をミリ秒単位で取得しようとしています.以下は、現在の時間をミリ秒単位で取得するために使用しているコードです。

boost::posix_time::ptime time = boost::posix_time::microsec_clock::local_time();
boost::posix_time::time_duration duration( time.time_of_day() );
std::cout << duration.total_milliseconds() << std::endl;

uint64_t timestampInMilliseconds = duration.total_milliseconds() // will this work or not?

std::cout << timestampInMilliseconds << std::endl;

しかし、これは10桁で出力され17227676ます..私は自分のコードをubuntuマシンで実行しています..そして、それは常に13桁の長さの値だと思いますか? そうじゃない?

タイムスタンプをミリ秒単位で計算した後、以下の式を使用する必要があります-

int end = (timestampInMilliseconds / (60 * 60 * 1000 * 24))  % 14

しかし、どういうわけか、取得しているtimestampInMillisecondsが正しいかどうかわかりませんか?

まず、boost::posix を使用する必要がありますか? 私はいくつかのより良い方法があるかもしれないと仮定しています..私は自分のubuntuマシンでコードを実行しています..

アップデート:-

このbashスクリプトは、13桁のtimestampInMillisecondsを出力するため..

date +%s%N | cut -b1-13
4

1 に答える 1

1

ここでの問題は、time_of_day()which を使用することです(このリファレンスから)

1 日の時間オフセットを取得します。

したがって、質問で提供した値から、このプログラムを午前 4 時 47 分に実行したと推測できます。

代わりに、たとえばを使用してto_tm()を取得し、struct tmそこからミリ秒単位で時間を構築したい場合があります。

また、コマンド (および関数)の%s形式は、ミリ秒数ではなく、エポックからの数であることに注意してください。datestrftime


構造を見るtmと、年数 (1900 年からなので、ここでは 70 を引いてください)、1 年に 1 日、次に 1 日に 1 時間、1 分、1 秒が表示されていることがわかります。これらはすべて、時間を秒単位で簡単に計算するために使用できます。

そして、それが数秒で問題になります。たとえばPOSIXtime関数を見ると、

エポックからの時間の値を秒単位で返すものとします

正確なミリ秒単位の解像度が必要な場合は、ptime( はpPOSIX を表す) を使用することはできません。ミリ秒の解像度が必要な場合は、たとえば、より高い解像度で時間を返すシステム関数 ( など) を使用するか、この古い SO answergettimeofdayなどを見ることができます。

于 2013-10-17T05:34:12.420 に答える