ad7227981fd7ea285ba3b1465ec49caf3f3a4d9c
1 #define DIFFTIME 0x19db1ded53e8000ULL
2 #define DIFFDAYS (3 * DAYSPER100YEARS + 17 * DAYSPER4YEARS + 1 * DAYSPERYEAR)
4 #define DAYSPERYEAR 365
5 #define DAYSPER4YEARS (4*DAYSPERYEAR+1)
6 #define DAYSPER100YEARS (25*DAYSPER4YEARS-1)
7 #define DAYSPER400YEARS (4*DAYSPER100YEARS+1)
8 #define SECONDSPERDAY (24*60*60)
9 #define SECONDSPERHOUR (60*60)
14 FileTimeToUnixTime(const FILETIME
*FileTime
, USHORT
*millitm
)
16 ULARGE_INTEGER ULargeInt
;
19 ULargeInt
.LowPart
= FileTime
->dwLowDateTime
;
20 ULargeInt
.HighPart
= FileTime
->dwHighDateTime
;
21 ULargeInt
.QuadPart
-= DIFFTIME
;
23 time
= ULargeInt
.QuadPart
/ 10000000;
25 *millitm
= (ULargeInt
.QuadPart
% 10000000) / 10000;
31 long leapyears_passed(long days
)
33 long quadcenturies
, centuries
, quadyears
;
34 quadcenturies
= days
/ DAYSPER400YEARS
;
35 days
-= quadcenturies
;
36 centuries
= days
/ DAYSPER100YEARS
;
38 quadyears
= days
/ DAYSPER4YEARS
;
39 return quadyears
- centuries
+ quadcenturies
;
43 long leapdays_passed(long days
)
45 return leapyears_passed(days
+ DAYSPERYEAR
- LEAPDAY
+ 1);
49 long years_passed(long days
)
51 return (days
- leapdays_passed(days
)) / 365;
54 extern long dst_begin
;