2017-05-21 9 views
-1

FILETIME構造から直接秒数を設定して取得するにはどうすればよいですか?FILETIME構造体からの直接の秒数を取得/設定します。

APIを使用せずに、FILETIME構造体からの秒数を取得/設定したいとします。

これは可能ですか?

私はいくつかの数学でこれを行う方法についてジャグリングを試みましたが、私はまだ数式を考え出していません。ここで

+1

何時からの秒数ですか?たとえば、Unixのタイムスタンプを取得しようとしていますか? – user4581301

+0

ファイル作成時間に対応する秒数を取得しようとしています - FILETIME構造にはこのファイル作成時間が含まれています – Shuzheng

+1

問題はいつからですか? FILETIMEは、1601年1月1日から100ナノ秒単位で開始される時間を記録します。一方、Unixベースのシステムでは、1970年1月1日からの時間が秒単位で記録されます。Excelとスプレッドシートは、異なる開始時間を使用します。 NTPは異なる開始時刻を使用します。誰も最高の視認時間に同意することができないと思われるので、誰もが異なる開始時間を使用します。 – user4581301

答えて

0

ルック:

ファイル時間は午前12時から経過した100ナノ秒間隔の数を表す64ビットの値であります1601年1月1日協定世界時(UTC)。

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724290.aspx

単に(1秒は10億ナノ秒を有し、または1E9 10.000.000により__int64、次いで整数除算の両方の部分を組み合わせ、64ビット値に構造を変換するため100 -nsの分解能はその1/100または1E7です)。

FILETIME timeFile; 
__int64 Time = (__int64) timeFile.dwHighDateTime << 32 | timeFile.dwLowDateTime; 
int TimeSec = Time/10000000; 

あなたはULARGE_INTEGERを使用し、その組合の.QuadPart経由でアクセスするが、Microsoftはまた、__int64またはULONGLONGを使用することを示唆することができます。 64ビットの数字はちょっと混乱します。


あなたはミニッツに関する割合として秒の値が必要な場合は、使用法と60は同じ分と時間に適用されますが、FILTETIMEはUTC現地ない時間であることを注意してください。日付、月、年を抽出するにはちょっと難しいですが、それを望むようには聞こえません。

関連する問題