#define DIFFTIME 0x19db1ded53e8000ULL #define DIFFDAYS (3 * DAYSPER100YEARS + 17 * DAYSPER4YEARS + 1 * DAYSPERYEAR) #define DAYSPERYEAR 365 #define DAYSPER4YEARS (4*DAYSPERYEAR+1) #define DAYSPER100YEARS (25*DAYSPER4YEARS-1) #define DAYSPER400YEARS (4*DAYSPER100YEARS+1) #define SECONDSPERDAY (24*60*60) #define SECONDSPERHOUR (60*60) #define LEAPDAY 59 static __inline __time64_t FileTimeToUnixTime(const FILETIME *FileTime, USHORT *millitm) { ULARGE_INTEGER ULargeInt; __time64_t time; ULargeInt.LowPart = FileTime->dwLowDateTime; ULargeInt.HighPart = FileTime->dwHighDateTime; ULargeInt.QuadPart -= DIFFTIME; time = ULargeInt.QuadPart / 10000000; if (millitm) *millitm = (USHORT)((ULargeInt.QuadPart % 10000000) / 10000); return time; } static __inline long leapyears_passed(long days) { long quadcenturies, centuries, quadyears; quadcenturies = days / DAYSPER400YEARS; days -= quadcenturies; centuries = days / DAYSPER100YEARS; days += centuries; quadyears = days / DAYSPER4YEARS; return quadyears - centuries + quadcenturies; } static __inline long leapdays_passed(long days) { return leapyears_passed(days + DAYSPERYEAR - LEAPDAY + 1); } static __inline long years_passed(long days) { return (days - leapdays_passed(days)) / 365; } extern long dst_begin; extern long dst_end;