C++でシステムクロックの現在の時刻(ミリ秒単位)を取得する方法はありますか?これは、Windows固有のアプリケーションです。Windowsのシステムクロックから現在の時間(ミリ秒単位)を取得していますか?
答えて
UTCで表される時間を取得するには、Win32 APIでGetSystemTime
を使用します。
SYSTEMTIME st;
GetSystemTime(&st);
SYSTEMTIME
これら関連部材を有するように記載され:shf301は親切以下指摘
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
ように、(同じプロトタイプを持つ)GetLocalTime
は、ユーザの現在のタイムゾーンに補正時間をもたらします。
ここには、あなたが何をしているかによっていくつかの良い回答があります。 を探しているのならば、の時間帯、私の答えは最善の方法です。算定のための確かな日付が必要な場合は、Alex'sを考えてみてください。 Windowsにはa lot of ways to skin the time catがあり、その中には他のものよりも正確なものもあります(誰もまだQueryPerformanceCounter
を挙げていません)。
アプリケーションのニーズに応じて、6つの一般的なオプションがあります。このDr Dobbs Journal articleは、あなたに最良の情報を選択するために必要なすべての情報を提供します。この記事からのあなたの特定のケースで
、:
GetSystemTimeは()現在の システム時刻を取得し、 は年を含む別々の フィールドの数で構成されて SYSTEMTIME構造をインスタンス化し、月、日、 時間、分、秒、および ミリ秒です。
GetSystemTimeを最初に使用してください。それが必要な場合は、SYSTEMTIME
の構造上でSystemTimeToFileTimeと呼び出すことができます。 FILETIME
は、1エポック以来、100ナノ秒の間隔の64ビットカウントであり、算術にはより適しています。 SYSTEMTIME
は、予想されるすべてのフィールド(年、月、日、時など、ミリ秒まで)を持つ構造体です。たとえば、真夜中から何ミリ秒経過したかを知りたい場合は、2つの構造体(現時点のもの、適切なフィールドをゼロにした後に同じSYSTEMTIME
を変換したもの)を減算し、おそらく最も簡単な方法は10です。
Jed、右、メモリからの書き込み、アンダースコアがあると思った。 –
それは私が考えたものです。 :) –
最も簡単な(そして最も直接的な)方法は、深夜01月01日1601
で少なくともための100ナノ秒間隔の64ビット数を格納する構造体、FILETIME
を返し、GetSystemTimeAsFileTime()
を呼び出すことですWindows NT 3.1,3.51、および4.01の時点では、GetSystemTimeAsFileTime()
APIは、現在の時刻を取得できる最速のユーザーモードAPIでした。また、単一のAPI呼び出しであるという利点(GetSystemTime() - > SystemTimeToFileTime())と比較して、通常の状況では失敗することはありません。
FILETIME ft_now;
ll_now
という名前の64ビット整数に変換するには、以下:
ll_now = (LONGLONG)ft_now.dwLowDateTime + ((LONGLONG)(ft_now.dwHighDateTime) << 32LL);
あなたはその後、ミリ秒(これらの10,000)で100ナノ秒間隔の数で割ると、あなたのことができますWin32エポックから数ミリ秒。
あなたは現在の日付にミリ秒数を見つけたいという願望を述べた1月1日、1970年
に到達するために116444736000000000LL
を引き、Unixエポックに変換するには。 Win32エポックは真夜中に始まるので、今日までに経過したミリ秒数は、モジュラス演算を伴うファイル時間から計算できます。具体的には、24 hours/day * 60 minutes/hour * 60 seconds/minute * 1000 milliseconds/second = 86,400,000 milliseconds/day
があるため、システム時間のモジュラスをミリ秒単位でユーザに入力することができます。86400000LL
異なるアプリケーションでは、モジュラスを使いたくないかもしれません。特に経過時間を計算している場合は、深夜のラップアラウンドが原因で問題が発生する可能性があります。これらの問題は解決できますが、私が知っている最も良い例は、リナックスカーネルのLinus Torvaldのラインです。
システム時刻は、UTC時刻として返されます(GetSystemTimeAsFileTime()
の場合と単純にGetSystemTime()
の両方の場合)。管理者が設定したローカル時間が必要な場合は、GetLocalTime()
を使用できます。
詳細については+1。 Windows NT 3.1,3.51、および4.01の最速のuser-api時にNT5.1 +のビットを追加するように注意してください。もはやそれはそれがもはや事実ではないことを意味するのだろうか? –
それは、私が4.01以降の状況に誓うことができないことを暗に意味するだけですが、実際にはこのAPIはまだまだ最速です。昔は、いくつかのMOV操作として実装されていました.SystemTimeAsFileTimeは、すべてのプロセスが読む共有メモリページに格納されています。 –
非常に良い、深い答えです。あなたの最後の質問に答えるために、私は環境のシナリオをシミュレートしています。日々進むにつれて、環境は暗くなります(屋外のように)。同期のために(自軍のエンジンが現在読んでいるフォーマットの真夜中からのミリ秒単位の)時刻を取得するのはちょっとしたことです:) – Mark
ここでは、Open Watcom Cプロジェクトで使用したWindowsで動作するコードをいくつか紹介します。これはCで動作するはずですが、++それは_dos_gettimeまたはgettimeを使用して秒(ないミリ秒単位)を返します
double seconds(void)
{
#ifdef __WATCOMC__
struct dostime_t t;
_dos_gettime(&t);
return ((double)t.hour * 3600 + (double)t.minute * 60 + (double)t.second + (double)t.hsecond * 0.01);
#else
struct time t;
gettime(&t);
return ((double)t.ti_hour * 3600 + (double)t.ti_min * 60 + (double)t.ti_sec + (double)t.ti_hund * 0.01);
#endif
}
上記ジェドの答えのカット・ツー・チェイス例:
const std::string currentDateTime() {
SYSTEMTIME st, lt;
GetSystemTime(&st);
char currentTime[84] = "";
sprintf(currentTime,"%d/%d/%d %d:%d:%d %d",st.wDay,st.wMonth,st.wYear, st.wHour, st.wMinute, st.wSecond , st.wMilliseconds);
return string(currentTime); }
'sprintf(currentTime、"%.4d%.2d%.2d%.2d%.2d%.2d%.4d "、st.wYear、st.wMonth、st.wDay、st.wHour、st.wMinute、 st.wSecond、st.wMilliseconds); '固定長の文字列の場合 – Antonio
これはUTC時間を取得します。 'GetLocalTime()'も同様に動作しますが、ローカルタイムゾーン時間を与えます –
- 1. Android - SMSタイムスタンプからの日時をミリ秒単位で取得
- 2. 時間差をミリ秒単位で取得する方法
- 3. エポックからの現在の時間(秒単位)のファイル名
- 4. Android(時間は0:00:000)はミリ秒単位で取得しますか?
- 5. NSTimer秒/ミリ秒単位で時間を短縮します。
- 6. アンドロイドで現在の日付時間をミリ秒単位で取得する方法
- 7. いくつかのEpochから現在の時間をミリ秒単位で取得する方法はありますか?
- 8. JodaTime開始日から現在のミリ秒を取得
- 9. Powershellを使用してミリ秒単位で時間を検索しますか?
- 10. C++クロノシステムの時間(単位:ミリ秒、時間)
- 11. 最速・最軽量の方法は、JSのDateオブジェクトとミリ秒単位で現在の時刻を取得し
- 12. ミリ秒単位での表現
- 13. numpy.timedelta64から秒単位の時間差
- 14. Joda時間、ミリ秒からの期間
- 15. C++でマイクロ秒単位でシステムクロックを取得するには?
- 16. 余分なパッケージをインストールせずに時間をミリ秒単位で取得しますか?
- 17. NetStream.seek(ミリ秒単位)
- 18. ミリ秒単位の基本時間への変換
- 19. 時間をミリ秒単位で表示する
- 20. 秒単位でデータを取得し、時間、分、秒を計算したい
- 21. 現在の時間を取得してからそれをインクリメントしますか?
- 22. ミリ秒から時、分、秒、およびミリ秒まで
- 23. 日付をミリ秒単位で取得する方法
- 24. (ブーストを使用して::スレッド)C++を使用して、ミリ秒単位で現在の時刻を取得し、私のスレッドで
- 25. リッチテキストボックスコントロールから現在のスクロール位置を取得しますか?
- 26. Android:時間のミリ秒からX日 - X時間 - x分 - X秒の残り
- 27. C言語でのミリまたはマイクロ秒単位の測定時間
- 28. ミリ秒から数ミリ秒?
- 29. (ミリ秒)の時間を現在のロケールのテキストに変換する方法は?
- 30. JavaScriptのエポックから秒単位で時間を取得するにはどうすればよいですか?
使用GetLocalTime時間を取得すると、ユーザーに表示される日付。 http://msdn.microsoft.com/en-us/library/ms724338%28VS.85%29.aspx – shf301
QueryPerformanceCounter ...貧しい人々になる欠点が多いので、あなたは冗談かもしれないと思いますここでの選択。 –
@Heath:ええ、申し訳ありませんが、それは明らかではありませんでした。 :) –