c ++ - Seneste mulige FILETIME

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skaber en mock genstand for at teste min ansøgning, så den virker på grænsevilkårene. Jeg bruger FILETIME i Windows SDK. [23]


Linket viser den tidligste tid, der er 1. januar 1601 (jeg antager midnat 00:00:00 og både dwLowDateTime og dwHighDateTime er 0x00000000), så jeg har det. er den nyeste mulige FILETIME?


Mit første instinkt er at indstille dwLowDateTime og dwHighDateTime til 0xFFFFFFFF, men så spurgte jeg, om det virkelig er en gyldig tid, jeg skal teste på grund af, hvor min linkede side siger [[SetFileTime funktionen bruger 0xFFFFFFFF for at angive, at en fils tidligere adgangstid skal bevares. [24]

Bedste reference


Min forståelse er, at FILETIME blev lavet til at repræsentere enhver gyldig SYSTEMTIME i 64 bit. Hvis du tager grænsen for SYSTEMTIME (sidste millisekund i 30827), slutter du med en FILETIME af 0x7fff35f4f06c58f0 ved hjælp af SystemTimeToFileTime(). [25] [26]


Men hvis du sætter 0x7fffffffffffffff ind i FileTimeToSystemTime(), vil du ende i år 30828, selv om denne dato er ugyldig for SYSTEMTIME. Enhver større værdi (0x8000000000000000 og over) forårsager FileTimeToSystemTime() at mislykkes. [27]


Alt i alt vil jeg anbefale ikke at gå ud over 0x7fff35f4f06c58f0 for at forblive kompatibel med SYSTEMTIME.

Andre referencer 1


Ifølge linket repræsenterer FILETIME:



  ... antallet af intervaller på 100 nanosekunder siden 1. januar 1601 (UTC).



så ikke den 1. januar 1970.


Det siger også



  ... funktionen SetFileTime [[for eksempel]] bruger 0xFFFFFFFF til at angive, at en fils tidligere adgangstid skal bevares.



Så jeg tror ikke, du forventer 0xFFFFFFFF at være en gyldig maksimumsværdi.


Ifølge patentskrift 6853957 er intervallet 30.000 år før/efter epoken (1. januar 1601). Det indebærer at du kan bruge det med negative datoer (dvs. datoer før epoken) også. [28]


EDIT: Bare beregnet: Det kan lagre (ca.) 58.454 dage værd på 100 nanosekund intervaller, så +/- 30.000 år lyder som en god værdi at gå med, hvis du accepterer negative datoer selvfølgelig.

Andre referencer 2


Der findes et svar i denne MSDN-artikel - Testsager til RTC Realtidsfunktionstest: [29]



  Prøven søger efter området, der begynder med det minimale mulige FILETIME (FILETIME 0 er starten den 1. januar 1601) og slutter med maksimal mulig FILETIME (Maks. FILETIME er maksimum 64-bit værdien).