ReactOS  0.4.14-dev-337-gf981a68
time.c File Reference
#include <rtl.h>
#include <debug.h>
Include dependency graph for time.c:

Go to the source code of this file.

Macros

#define NDEBUG
 
#define TICKSPERMIN   600000000
 
#define TICKSPERSEC   10000000
 
#define TICKSPERMSEC   10000
 
#define SECSPERDAY   86400
 
#define SECSPERHOUR   3600
 
#define SECSPERMIN   60
 
#define MINSPERHOUR   60
 
#define HOURSPERDAY   24
 
#define EPOCHWEEKDAY   1
 
#define DAYSPERWEEK   7
 
#define EPOCHYEAR   1601
 
#define DAYSPERNORMALYEAR   365
 
#define DAYSPERLEAPYEAR   366
 
#define MONSPERYEAR   12
 
#define TICKSTO1970   0x019db1ded53e8000i64
 
#define TICKSTO1980   0x01a8e79fe1d58000i64
 

Functions

static __inline int IsLeapYear (int Year)
 
static int DaysSinceEpoch (int Year)
 
BOOLEAN NTAPI RtlCutoverTimeToSystemTime (IN PTIME_FIELDS CutoverTimeFields, OUT PLARGE_INTEGER SystemTime, IN PLARGE_INTEGER CurrentTime, IN BOOLEAN ThisYearsCutoverOnly)
 
BOOLEAN NTAPI RtlTimeFieldsToTime (IN PTIME_FIELDS TimeFields, OUT PLARGE_INTEGER Time)
 
VOID NTAPI RtlTimeToElapsedTimeFields (IN PLARGE_INTEGER Time, OUT PTIME_FIELDS TimeFields)
 
VOID NTAPI RtlTimeToTimeFields (IN PLARGE_INTEGER Time, OUT PTIME_FIELDS TimeFields)
 
BOOLEAN NTAPI RtlTimeToSecondsSince1970 (IN PLARGE_INTEGER Time, OUT PULONG SecondsSince1970)
 
BOOLEAN NTAPI RtlTimeToSecondsSince1980 (IN PLARGE_INTEGER Time, OUT PULONG SecondsSince1980)
 
NTSTATUS NTAPI RtlLocalTimeToSystemTime (IN PLARGE_INTEGER LocalTime, OUT PLARGE_INTEGER SystemTime)
 
NTSTATUS NTAPI RtlSystemTimeToLocalTime (IN PLARGE_INTEGER SystemTime, OUT PLARGE_INTEGER LocalTime)
 
VOID NTAPI RtlSecondsSince1970ToTime (IN ULONG SecondsSince1970, OUT PLARGE_INTEGER Time)
 
VOID NTAPI RtlSecondsSince1980ToTime (IN ULONG SecondsSince1980, OUT PLARGE_INTEGER Time)
 

Variables

static const unsigned int YearLengths [2]
 
static const UCHAR MonthLengths [2][MONSPERYEAR]
 

Macro Definition Documentation

◆ DAYSPERLEAPYEAR

#define DAYSPERLEAPYEAR   366

Definition at line 28 of file time.c.

◆ DAYSPERNORMALYEAR

#define DAYSPERNORMALYEAR   365

Definition at line 27 of file time.c.

◆ DAYSPERWEEK

#define DAYSPERWEEK   7

Definition at line 25 of file time.c.

◆ EPOCHWEEKDAY

#define EPOCHWEEKDAY   1

Definition at line 24 of file time.c.

◆ EPOCHYEAR

#define EPOCHYEAR   1601

Definition at line 26 of file time.c.

◆ HOURSPERDAY

#define HOURSPERDAY   24

Definition at line 23 of file time.c.

◆ MINSPERHOUR

#define MINSPERHOUR   60

Definition at line 22 of file time.c.

◆ MONSPERYEAR

#define MONSPERYEAR   12

Definition at line 29 of file time.c.

◆ NDEBUG

#define NDEBUG

Definition at line 13 of file time.c.

◆ SECSPERDAY

#define SECSPERDAY   86400

Definition at line 19 of file time.c.

◆ SECSPERHOUR

#define SECSPERHOUR   3600

Definition at line 20 of file time.c.

◆ SECSPERMIN

#define SECSPERMIN   60

Definition at line 21 of file time.c.

◆ TICKSPERMIN

#define TICKSPERMIN   600000000

Definition at line 16 of file time.c.

◆ TICKSPERMSEC

#define TICKSPERMSEC   10000

Definition at line 18 of file time.c.

◆ TICKSPERSEC

#define TICKSPERSEC   10000000

Definition at line 17 of file time.c.

◆ TICKSTO1970

#define TICKSTO1970   0x019db1ded53e8000i64

Definition at line 35 of file time.c.

◆ TICKSTO1980

#define TICKSTO1980   0x01a8e79fe1d58000i64

Definition at line 36 of file time.c.

Function Documentation

◆ DaysSinceEpoch()

static int DaysSinceEpoch ( int  Year)
static

Definition at line 55 of file time.c.

56 {
57  int Days;
58  Year--; /* Don't include a leap day from the current year */
59  Days = Year * DAYSPERNORMALYEAR + Year / 4 - Year / 100 + Year / 400;
60  Days -= (EPOCHYEAR - 1) * DAYSPERNORMALYEAR + (EPOCHYEAR - 1) / 4 - (EPOCHYEAR - 1) / 100 + (EPOCHYEAR - 1) / 400;
61  return Days;
62 }
#define EPOCHYEAR
Definition: time.c:26
#define DAYSPERNORMALYEAR
Definition: time.c:27

Referenced by RtlTimeFieldsToTime(), and RtlTimeToTimeFields().

◆ IsLeapYear()

static __inline int IsLeapYear ( int  Year)
static

Definition at line 50 of file time.c.

51 {
52  return Year % 4 == 0 && (Year % 100 != 0 || Year % 400 == 0) ? 1 : 0;
53 }

Referenced by RtlCutoverTimeToSystemTime(), RtlTimeFieldsToTime(), and RtlTimeToTimeFields().

◆ RtlCutoverTimeToSystemTime()

BOOLEAN NTAPI RtlCutoverTimeToSystemTime ( IN PTIME_FIELDS  CutoverTimeFields,
OUT PLARGE_INTEGER  SystemTime,
IN PLARGE_INTEGER  CurrentTime,
IN BOOLEAN  ThisYearsCutoverOnly 
)

Definition at line 70 of file time.c.

74 {
75  TIME_FIELDS AdjustedTimeFields;
76  TIME_FIELDS CurrentTimeFields;
77  TIME_FIELDS CutoverSystemTimeFields;
78  LARGE_INTEGER CutoverSystemTime;
79  UCHAR MonthLength;
80  CSHORT Days;
81  BOOLEAN NextYearsCutover = FALSE;
82 
83  /* Check fixed cutover time */
84  if (CutoverTimeFields->Year != 0)
85  {
86  if (!RtlTimeFieldsToTime(CutoverTimeFields, SystemTime))
87  return FALSE;
88 
89  if (SystemTime->QuadPart < CurrentTime->QuadPart)
90  return FALSE;
91 
92  return TRUE;
93  }
94 
95  /*
96  * Compute recurring cutover time
97  */
98 
99  /* Day must be between 1(first) and 5(last) */
100  if (CutoverTimeFields->Day == 0 || CutoverTimeFields->Day > 5)
101  return FALSE;
102 
103  RtlTimeToTimeFields(CurrentTime, &CurrentTimeFields);
104 
105  while (TRUE)
106  {
107  /* Compute the cutover time of the first day of the current month */
108  AdjustedTimeFields.Year = CurrentTimeFields.Year;
109  if (NextYearsCutover)
110  AdjustedTimeFields.Year++;
111 
112  AdjustedTimeFields.Month = CutoverTimeFields->Month;
113  AdjustedTimeFields.Day = 1;
114  AdjustedTimeFields.Hour = CutoverTimeFields->Hour;
115  AdjustedTimeFields.Minute = CutoverTimeFields->Minute;
116  AdjustedTimeFields.Second = CutoverTimeFields->Second;
117  AdjustedTimeFields.Milliseconds = CutoverTimeFields->Milliseconds;
118 
119  if (!RtlTimeFieldsToTime(&AdjustedTimeFields, &CutoverSystemTime))
120  return FALSE;
121 
122  RtlTimeToTimeFields(&CutoverSystemTime, &CutoverSystemTimeFields);
123 
124  /* Adjust day to first matching weekday */
125  if (CutoverSystemTimeFields.Weekday != CutoverTimeFields->Weekday)
126  {
127  if (CutoverSystemTimeFields.Weekday < CutoverTimeFields->Weekday)
128  Days = CutoverTimeFields->Weekday - CutoverSystemTimeFields.Weekday;
129  else
130  Days = DAYSPERWEEK - (CutoverSystemTimeFields.Weekday - CutoverTimeFields->Weekday);
131 
132  AdjustedTimeFields.Day += Days;
133  }
134 
135  /* Adjust the number of weeks */
136  if (CutoverTimeFields->Day > 1)
137  {
138  Days = DAYSPERWEEK * (CutoverTimeFields->Day - 1);
139  MonthLength = MonthLengths[IsLeapYear(AdjustedTimeFields.Year)][AdjustedTimeFields.Month - 1];
140  if ((AdjustedTimeFields.Day + Days) > MonthLength)
141  Days -= DAYSPERWEEK;
142 
143  AdjustedTimeFields.Day += Days;
144  }
145 
146  if (!RtlTimeFieldsToTime(&AdjustedTimeFields, &CutoverSystemTime))
147  return FALSE;
148 
149  if (ThisYearsCutoverOnly ||
150  NextYearsCutover ||
151  CutoverSystemTime.QuadPart >= CurrentTime->QuadPart)
152  {
153  break;
154  }
155 
156  NextYearsCutover = TRUE;
157  }
158 
159  SystemTime->QuadPart = CutoverSystemTime.QuadPart;
160 
161  return TRUE;
162 }
USHORT Weekday
Definition: env_spec_w32.h:718
#define DAYSPERWEEK
Definition: time.c:25
#define TRUE
Definition: types.h:120
VOID NTAPI RtlTimeToTimeFields(IN PLARGE_INTEGER Time, OUT PTIME_FIELDS TimeFields)
Definition: time.c:253
static __inline int IsLeapYear(int Year)
Definition: time.c:50
unsigned char BOOLEAN
static const UCHAR MonthLengths[2][MONSPERYEAR]
Definition: time.c:44
USHORT Milliseconds
Definition: env_spec_w32.h:717
unsigned char UCHAR
Definition: xmlstorage.h:181
BOOLEAN NTAPI RtlTimeFieldsToTime(IN PTIME_FIELDS TimeFields, OUT PLARGE_INTEGER Time)
Definition: time.c:170
short CSHORT
Definition: umtypes.h:127
LONGLONG QuadPart
Definition: typedefs.h:112

◆ RtlLocalTimeToSystemTime()

NTSTATUS NTAPI RtlLocalTimeToSystemTime ( IN PLARGE_INTEGER  LocalTime,
OUT PLARGE_INTEGER  SystemTime 
)

Definition at line 356 of file time.c.

358 {
359  SYSTEM_TIMEOFDAY_INFORMATION TimeInformation;
361 
363  &TimeInformation,
364  sizeof(TimeInformation),
365  NULL);
366  if (!NT_SUCCESS(Status))
367  return Status;
368 
369  SystemTime->QuadPart = LocalTime->QuadPart +
370  TimeInformation.TimeZoneBias.QuadPart;
371 
372  return STATUS_SUCCESS;
373 }
LONG NTSTATUS
Definition: precomp.h:26
NTSYSAPI NTSTATUS NTAPI ZwQuerySystemInformation(IN SYSTEM_INFORMATION_CLASS SystemInfoClass, OUT PVOID SystemInfoBuffer, IN ULONG SystemInfoBufferSize, OUT PULONG BytesReturned OPTIONAL)
smooth NULL
Definition: ftsmooth.c:416
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
Status
Definition: gdiplustypes.h:24
LARGE_INTEGER TimeZoneBias
Definition: extypes.h:847
return STATUS_SUCCESS
Definition: btrfs.c:2938
LONGLONG QuadPart
Definition: typedefs.h:112

◆ RtlSecondsSince1970ToTime()

VOID NTAPI RtlSecondsSince1970ToTime ( IN ULONG  SecondsSince1970,
OUT PLARGE_INTEGER  Time 
)

Definition at line 406 of file time.c.

408 {
409  Time->QuadPart = ((LONGLONG)SecondsSince1970 * TICKSPERSEC) + TICKSTO1970;
410 }
#define TICKSTO1970
Definition: time.c:35
int64_t LONGLONG
Definition: typedefs.h:66
#define TICKSPERSEC
Definition: time.c:17
static PLARGE_INTEGER Time
Definition: time.c:105
LONGLONG QuadPart
Definition: typedefs.h:112

◆ RtlSecondsSince1980ToTime()

VOID NTAPI RtlSecondsSince1980ToTime ( IN ULONG  SecondsSince1980,
OUT PLARGE_INTEGER  Time 
)

Definition at line 417 of file time.c.

419 {
420  Time->QuadPart = ((LONGLONG)SecondsSince1980 * TICKSPERSEC) + TICKSTO1980;
421 }
#define TICKSTO1980
Definition: time.c:36
int64_t LONGLONG
Definition: typedefs.h:66
#define TICKSPERSEC
Definition: time.c:17
static PLARGE_INTEGER Time
Definition: time.c:105
LONGLONG QuadPart
Definition: typedefs.h:112

◆ RtlSystemTimeToLocalTime()

NTSTATUS NTAPI RtlSystemTimeToLocalTime ( IN PLARGE_INTEGER  SystemTime,
OUT PLARGE_INTEGER  LocalTime 
)

Definition at line 381 of file time.c.

383 {
384  SYSTEM_TIMEOFDAY_INFORMATION TimeInformation;
386 
388  &TimeInformation,
389  sizeof(TimeInformation),
390  NULL);
391  if (!NT_SUCCESS(Status))
392  return Status;
393 
394  LocalTime->QuadPart = SystemTime->QuadPart -
395  TimeInformation.TimeZoneBias.QuadPart;
396 
397  return STATUS_SUCCESS;
398 }
LONG NTSTATUS
Definition: precomp.h:26
NTSYSAPI NTSTATUS NTAPI ZwQuerySystemInformation(IN SYSTEM_INFORMATION_CLASS SystemInfoClass, OUT PVOID SystemInfoBuffer, IN ULONG SystemInfoBufferSize, OUT PULONG BytesReturned OPTIONAL)
smooth NULL
Definition: ftsmooth.c:416
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
Status
Definition: gdiplustypes.h:24
LARGE_INTEGER TimeZoneBias
Definition: extypes.h:847
return STATUS_SUCCESS
Definition: btrfs.c:2938
LONGLONG QuadPart
Definition: typedefs.h:112

◆ RtlTimeFieldsToTime()

BOOLEAN NTAPI RtlTimeFieldsToTime ( IN PTIME_FIELDS  TimeFields,
OUT PLARGE_INTEGER  Time 
)

Definition at line 170 of file time.c.

172 {
173  ULONG CurMonth;
174  TIME_FIELDS IntTimeFields;
175 
176  RtlCopyMemory(&IntTimeFields,
177  TimeFields,
178  sizeof(TIME_FIELDS));
179 
180  if (TimeFields->Milliseconds < 0 || TimeFields->Milliseconds > 999 ||
181  TimeFields->Second < 0 || TimeFields->Second > 59 ||
182  TimeFields->Minute < 0 || TimeFields->Minute > 59 ||
183  TimeFields->Hour < 0 || TimeFields->Hour > 23 ||
184  TimeFields->Month < 1 || TimeFields->Month > 12 ||
185  TimeFields->Day < 1 ||
186  TimeFields->Day >
188  TimeFields->Year < 1601)
189  {
190  return FALSE;
191  }
192 
193  /* Compute the time */
194  Time->QuadPart = DaysSinceEpoch(IntTimeFields.Year);
195  for (CurMonth = 1; CurMonth < IntTimeFields.Month; CurMonth++)
196  {
197  Time->QuadPart += MonthLengths[IsLeapYear(IntTimeFields.Year)][CurMonth - 1];
198  }
199  Time->QuadPart += IntTimeFields.Day - 1;
201  Time->QuadPart += IntTimeFields.Hour * SECSPERHOUR + IntTimeFields.Minute * SECSPERMIN +
202  IntTimeFields.Second;
204  Time->QuadPart += IntTimeFields.Milliseconds * TICKSPERMSEC;
205 
206  return TRUE;
207 }
#define TRUE
Definition: types.h:120
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
static __inline int IsLeapYear(int Year)
Definition: time.c:50
static int DaysSinceEpoch(int Year)
Definition: time.c:55
#define SECSPERHOUR
Definition: time.c:20
static const UCHAR MonthLengths[2][MONSPERYEAR]
Definition: time.c:44
USHORT Milliseconds
Definition: env_spec_w32.h:717
#define SECSPERMIN
Definition: time.c:21
#define TICKSPERMSEC
Definition: time.c:18
#define TICKSPERSEC
Definition: time.c:17
#define SECSPERDAY
Definition: time.c:19
unsigned int ULONG
Definition: retypes.h:1
static PTIME_FIELDS TimeFields
Definition: time.c:104
static PLARGE_INTEGER Time
Definition: time.c:105
LONGLONG QuadPart
Definition: typedefs.h:112

Referenced by DosDateTimeToFileTime(), ExpSetTimeZoneInformation(), RtlCutoverTimeToSystemTime(), SetLocalTime(), SetSystemTime(), and SystemTimeToFileTime().

◆ RtlTimeToElapsedTimeFields()

VOID NTAPI RtlTimeToElapsedTimeFields ( IN PLARGE_INTEGER  Time,
OUT PTIME_FIELDS  TimeFields 
)

Definition at line 215 of file time.c.

217 {
219  ULONG SecondsInDay;
220  ULONG SecondsInMinute;
221 
222  /* Extract millisecond from time */
224 
225  /* Compute elapsed seconds */
227 
228  /* Compute seconds within the day */
229  SecondsInDay = ElapsedSeconds % SECSPERDAY;
230 
231  /* Compute elapsed minutes within the day */
232  SecondsInMinute = SecondsInDay % SECSPERHOUR;
233 
234  /* Compute elapsed time of day */
235  TimeFields->Hour = (CSHORT)(SecondsInDay / SECSPERHOUR);
236  TimeFields->Minute = (CSHORT)(SecondsInMinute / SECSPERMIN);
237  TimeFields->Second = (CSHORT)(SecondsInMinute % SECSPERMIN);
238 
239  /* Compute elapsed days */
241 
242  /* The elapsed number of months and days cannot be calculated */
243  TimeFields->Month = 0;
244  TimeFields->Year = 0;
245 }
#define SECSPERHOUR
Definition: time.c:20
USHORT Milliseconds
Definition: env_spec_w32.h:717
uint64_t ULONGLONG
Definition: typedefs.h:65
#define SECSPERMIN
Definition: time.c:21
#define TICKSPERMSEC
Definition: time.c:18
#define TICKSPERSEC
Definition: time.c:17
#define SECSPERDAY
Definition: time.c:19
unsigned int ULONG
Definition: retypes.h:1
static PTIME_FIELDS TimeFields
Definition: time.c:104
short CSHORT
Definition: umtypes.h:127
_Out_ PULONG ElapsedSeconds
Definition: rtlfuncs.h:4436
static PLARGE_INTEGER Time
Definition: time.c:105
LONGLONG QuadPart
Definition: typedefs.h:112

◆ RtlTimeToSecondsSince1970()

BOOLEAN NTAPI RtlTimeToSecondsSince1970 ( IN PLARGE_INTEGER  Time,
OUT PULONG  SecondsSince1970 
)

Definition at line 312 of file time.c.

314 {
315  LARGE_INTEGER IntTime;
316 
317  IntTime.QuadPart = Time->QuadPart - TICKSTO1970;
318  IntTime.QuadPart = IntTime.QuadPart / TICKSPERSEC;
319 
320  if (IntTime.u.HighPart != 0)
321  return FALSE;
322 
323  *SecondsSince1970 = IntTime.u.LowPart;
324 
325  return TRUE;
326 }
#define TRUE
Definition: types.h:120
#define TICKSTO1970
Definition: time.c:35
struct _LARGE_INTEGER::@2219 u
#define TICKSPERSEC
Definition: time.c:17
static PLARGE_INTEGER Time
Definition: time.c:105
LONGLONG QuadPart
Definition: typedefs.h:112

◆ RtlTimeToSecondsSince1980()

BOOLEAN NTAPI RtlTimeToSecondsSince1980 ( IN PLARGE_INTEGER  Time,
OUT PULONG  SecondsSince1980 
)

Definition at line 334 of file time.c.

336 {
337  LARGE_INTEGER IntTime;
338 
339  IntTime.QuadPart = Time->QuadPart - TICKSTO1980;
340  IntTime.QuadPart = IntTime.QuadPart / TICKSPERSEC;
341 
342  if (IntTime.u.HighPart != 0)
343  return FALSE;
344 
345  *SecondsSince1980 = IntTime.u.LowPart;
346 
347  return TRUE;
348 }
#define TRUE
Definition: types.h:120
#define TICKSTO1980
Definition: time.c:36
struct _LARGE_INTEGER::@2219 u
#define TICKSPERSEC
Definition: time.c:17
static PLARGE_INTEGER Time
Definition: time.c:105
LONGLONG QuadPart
Definition: typedefs.h:112

◆ RtlTimeToTimeFields()

VOID NTAPI RtlTimeToTimeFields ( IN PLARGE_INTEGER  Time,
OUT PTIME_FIELDS  TimeFields 
)

Definition at line 253 of file time.c.

255 {
256  const UCHAR *Months;
257  ULONG SecondsInDay, CurYear;
258  ULONG LeapYear, CurMonth;
259  ULONG Days;
260  ULONGLONG IntTime = Time->QuadPart;
261 
262  /* Extract millisecond from time and convert time into seconds */
264  IntTime = IntTime / TICKSPERSEC;
265 
266  /* Split the time into days and seconds within the day */
267  Days = (ULONG)(IntTime / SECSPERDAY);
268  SecondsInDay = IntTime % SECSPERDAY;
269 
270  /* Compute time of day */
271  TimeFields->Hour = (CSHORT)(SecondsInDay / SECSPERHOUR);
272  SecondsInDay = SecondsInDay % SECSPERHOUR;
273  TimeFields->Minute = (CSHORT)(SecondsInDay / SECSPERMIN);
274  TimeFields->Second = (CSHORT)(SecondsInDay % SECSPERMIN);
275 
276  /* Compute day of week */
278 
279  /* Compute year */
280  CurYear = EPOCHYEAR;
281  CurYear += Days / DAYSPERLEAPYEAR;
282  Days -= DaysSinceEpoch(CurYear);
283  while (TRUE)
284  {
285  LeapYear = IsLeapYear(CurYear);
286  if (Days < YearLengths[LeapYear])
287  {
288  break;
289  }
290  CurYear++;
291  Days = Days - YearLengths[LeapYear];
292  }
293  TimeFields->Year = (CSHORT)CurYear;
294 
295  /* Compute month of year */
296  LeapYear = IsLeapYear(CurYear);
297  Months = MonthLengths[LeapYear];
298  for (CurMonth = 0; Days >= Months[CurMonth]; CurMonth++)
299  {
300  Days = Days - Months[CurMonth];
301  }
302  TimeFields->Month = (CSHORT)(CurMonth + 1);
303  TimeFields->Day = (CSHORT)(Days + 1);
304 }
USHORT Weekday
Definition: env_spec_w32.h:718
#define DAYSPERWEEK
Definition: time.c:25
#define TRUE
Definition: types.h:120
#define DAYSPERLEAPYEAR
Definition: time.c:28
static WORD LeapYear(IN WORD Year)
Definition: monthcal.c:84
static const unsigned int YearLengths[2]
Definition: time.c:40
static __inline int IsLeapYear(int Year)
Definition: time.c:50
static int DaysSinceEpoch(int Year)
Definition: time.c:55
#define SECSPERHOUR
Definition: time.c:20
#define EPOCHYEAR
Definition: time.c:26
static const UCHAR MonthLengths[2][MONSPERYEAR]
Definition: time.c:44
USHORT Milliseconds
Definition: env_spec_w32.h:717
uint64_t ULONGLONG
Definition: typedefs.h:65
#define SECSPERMIN
Definition: time.c:21
#define EPOCHWEEKDAY
Definition: time.c:24
unsigned char UCHAR
Definition: xmlstorage.h:181
#define TICKSPERMSEC
Definition: time.c:18
static ULONG(WINAPI *pNtGetTickCount)(void)
#define TICKSPERSEC
Definition: time.c:17
#define SECSPERDAY
Definition: time.c:19
unsigned int ULONG
Definition: retypes.h:1
static PTIME_FIELDS TimeFields
Definition: time.c:104
short CSHORT
Definition: umtypes.h:127
static PLARGE_INTEGER Time
Definition: time.c:105
LONGLONG QuadPart
Definition: typedefs.h:112

Referenced by FileTimeToDosDateTime(), FileTimeToSystemTime(), GetLocalTime(), GetSystemTime(), NtSetSystemTime(), and RtlCutoverTimeToSystemTime().

Variable Documentation

◆ MonthLengths

const UCHAR MonthLengths[2][MONSPERYEAR]
static
Initial value:
=
{
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },
{ 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
}

Definition at line 44 of file time.c.

Referenced by RtlCutoverTimeToSystemTime(), RtlTimeFieldsToTime(), and RtlTimeToTimeFields().

◆ YearLengths

const unsigned int YearLengths[2]
static
Initial value:
=
{
}
#define DAYSPERLEAPYEAR
Definition: time.c:28
#define DAYSPERNORMALYEAR
Definition: time.c:27

Definition at line 40 of file time.c.

Referenced by RtlTimeToTimeFields().