2013-02-01 67 views
0

試圖找到功能SystemTimeToFileTime的完整模擬,但無法找到它。SystemTimeToFileTime在Linux中的確切替換

我所有的SYSTEMTIME和FILETIME結構,在Linux上正常工作SYSTEMTIME的日期差函數:

int64_t Delta2(const SYSTEMTIME st1, const SYSTEMTIME st2) { 

    union timeunion { FILETIME fileTime; ULARGE_INTEGER ul; } ; 
    timeunion ft1; 
    timeunion ft2; 
    SystemTimeToFileTime(&st1, &ft1.fileTime); 
    SystemTimeToFileTime(&st2, &ft2.fileTime); 

    return ft2.ul.QuadPart - ft1.ul.QuadPart; 
} 

任何人知道確切的更換SystemTimeToFileTime功能?

回答

0

我建議你諮詢WINE項目的來源,它將包含你所需要的。

+0

謝謝,檢查... – Ulterior

1

A FILETIME只是一個具有10毫秒分辨率的時間戳,分爲兩個32位數字。一個POSIX時間戳(第二個分辨率)可以簡單地乘以100來獲得。

要從SYSTEMTIMEFILETIME你可以創建與相關領域的一個struct tm獲得,並使用mktime創建time_t。將該時間戳放在一個64位整數中,乘以100(得到10毫秒分辨率)並添加SYSTEMTIMEwMilliseconds字段(除以10),並且您有FILETIME

0

SYSTEMTIME

指定的日期和時間,採用個人會員月,日,年,星期,時,分,秒和毫秒。時間可以是協調世界時(UTC)或當地時間,具體取決於被調用的函數。

最近的類型是struct tm,雖然它沒有毫秒。

FILETIME

包含表示自1601年1月1,(UTC)的100毫微秒的時間間隔的數量的64位值。

您可以使用struct timeval(支持微秒)或struct timespec(支持納秒)

並非所有的文件系統支持納秒,ext4做,例如。

SystemTimeToFileTime

您可以使用mktime這一點,雖然你會因爲時代(1970-01-01 04:00),只得到秒。

所以,我會說一個確切替換是困難的,至少可以說。

0

Linux沒有像「filetime」這樣的概念。具體取決於你在做什麼,最好使用difftime(以秒爲單位給出兩個time_t之間的差值作爲浮點數),還是使用更精確的時間戳,並將其轉換爲10ms間隔的差值?可以使用mktime將日期/時間值轉換爲time_t