четвер, 19 травня 2011 р.

Формати дати і часу

Container
Domain
Format / Notes
Min Date
Resolution
SYSTEMTIME
Win32
Struct (16 bytes)
January 1, 1601
1 millisecond
FILETIME
Win32
Offset value (64bit unsigned int)
January 1, 1601
100 nanoseconds
VT_DATE
Win32 / OLE Automation
Offset value (64bit signed float), 0.0 is December 30, 1899.
January 1, 100 (1)
500 milliseconds (2)
FAT/MS-DOS
Win32
Struct (values packed into two 16bit ints)
January 1, 1980
2 seconds
time_t
CRT
Offset value (unsigned int)
January 1, 1970
1 second
tm
CRT
Struct (36 bytes (3))
January 1, 1900
1 second

Перетворення

Windows Times


SYSTEMTIME
FILETIME
VT_DATE
FAT/приложений-DOS
SYSTEMTIME

SystemTimeToFileTime
SystemTimeToVariantTime

FILETIME
FileTimeToSystemTime


FileTimeToDosDateTime
VT_DATE
VariantTimeToSystemTime


VariantTimeToDosDateTime
FAT/приложений-DOS

DosDateTimeToFileTime
DosDateTimeToVariantTime

CRT Times


time_t
ТМ
time_t

gmtime
ТМ
mktime


Converting between SYSTEMTIME and time_t

 
void SystemTimeToTime_t(SYSTEMTIME *systemTime, time_t *dosTime) 
{ 
 LARGE_INTEGER jan1970FT = {0}; 
 jan1970FT.QuadPart = 116444736000000000I64; // january 1st 1970 
 LARGE_INTEGER utcFT = {0}; 
 SystemTimeToFileTime(systemTime, (FILETIME*)&utcFT); 
 unsigned __int64 utcDosTime = (utcFT.QuadPart - an1970FT.QuadPart) / 10000000; 
 *dosTime = (time_t)utcDosTime; 
}
void Time_tToSystemTime(time_t dosTime, SYSTEMTIME *systemTime)
{ 
 LARGE_INTEGER jan1970FT = {0}; 
 jan1970FT.QuadPart = 116444736000000000I64; // january 1st 1970
 LARGE_INTEGER utcFT = {0};
 utcFT.QuadPart = ((unsigned __int64)dosTime) * 10000000 + jan1970FT.QuadPart; 
 FileTimeToSystemTime((FILETIME*)&utcFT, systemTime);
}