2015-10-16 109 views
1

將由GetLocalTime返回的SYSTEMTIME結構轉換爲時間戳(自1970年以來的秒數ULONG)會怎樣?將本地時間轉換爲時間戳

+1

供參考:ISO具有時間戳標準[ISO 8601](https://en.wikipedia.org/wiki/ISO_8601) – chux

回答

2

一種方法是將參考時間和目標時間都轉換爲FILETIME結構,然後您可以根據它們的值執行簡單的算術運算。這些以100ns爲單位進行測量,因此您需要將最終結果除以10000000以獲得秒數。

// reference time, convert to FILETIME 
SYSTEMTIME stRef{}; 
stRef.wYear = 1970; 
stRef.wMonth = 1; 
stRef.wDay = 1; 

FILETIME ftRef; 
SystemTimeToFileTime(&stRef, &ftRef); 


// target time, convert to FILETIME 
SYSTEMTIME stTarget; 
GetLocalTime(&stTarget); 

FILETIME ftTarget; 
SystemTimeToFileTime(&stTarget, &ftTarget); 


// convert both to ULARGE_INTEGER 
ULARGE_INTEGER ulRef, ulTarget; 
ulRef.HighPart = ftRef.dwHighDateTime; 
ulRef.LowPart = ftRef.dwLowDateTime; 
ulTarget.HighPart = ftTarget.dwHighDateTime; 
ulTarget.LowPart = ftTarget.dwLowDateTime; 


// subtract reference time from target time 
ulTarget.QuadPart -= ulRef.QuadPart; 

// convert to seconds (divide by 10000000) 
DWORD dwSecondsSinceRefTime = ulTarget.QuadPart/10000000i64; 
+0

不是應該的'GetSystemTime'代替'GetLocalTime'?即使我們處於不同的時區,我們現在也應該看到相同的時間戳。 –

+0

@BarmakShemirani這就是OP所要求的,當然你可以使用任何時間戳。這是重要的方法。 –

+0

我不知道我在OP的問題中錯過了GetLocalTime。也許早期的癡呆症。 –

相關問題