1 #include "mytime.h"
2 #include <time.h>
3 #include <stdlib.h>
4 #ifdef WIN32
5   #include <windows.h>
6 #endif
7 #include "debug.h"
8 
getLocalTime(time_t * when)9 struct tm *getLocalTime(time_t *when)
10 {
11   struct tm *mytime;
12   int free_when = 0;
13 
14   if (when == NULL)
15   {
16     when = malloc(sizeof(time_t));
17     *when = time((time_t *)NULL);
18     free_when = 1;
19   }
20 
21 #ifndef WIN32
22   mytime = (struct tm *)malloc(sizeof(struct tm));
23   localtime_r(when, mytime);
24 #else
25   mytime = localtime(when);
26 #endif
27   if (mytime == NULL)
28   {
29      _ERROR("Memory allocation failed.");
30      exit(1);
31   }
32 
33   if (free_when)
34     free(when);
35   return mytime;
36 }
37 
getHour()38 int getHour()
39 {
40   struct tm *mytime;
41   int hour = 0;
42 
43   mytime = getLocalTime((time_t *)NULL);
44   hour = mytime->tm_hour;
45 #ifndef WIN32
46   free(mytime);
47 #endif
48   return hour;
49 }
50 
51 #ifndef WIN32
getDayName(time_t when)52 char *getDayName(time_t when)
53 {
54   struct tm *mytime;
55   char *dayName;
56 
57   mytime = getLocalTime(&when);
58   dayName = (char *)calloc(20, 1); /* Large vision! */
59   strftime(dayName, 20, "%A", mytime);
60   free(mytime);
61   return dayName;
62 }
63 #else
UnixTimeToFileTime(time_t t,LPFILETIME pft)64 void UnixTimeToFileTime(time_t t, LPFILETIME pft)
65 {
66   LONGLONG ll;
67 
68   ll = Int32x32To64(t, (long long)10000000LL);
69   ll += (long long int)116444736000000000LL;
70   pft->dwLowDateTime = (DWORD)ll;
71   pft->dwHighDateTime = ll >> 32;
72 }
73 
UnixTimeToSystemTime(time_t t,LPSYSTEMTIME pst)74 void UnixTimeToSystemTime(time_t t, LPSYSTEMTIME pst)
75 {
76   FILETIME ft;
77 
78   UnixTimeToFileTime(t, &ft);
79   FileTimeToSystemTime(&ft, pst);
80 }
81 
getDayName(time_t when)82 char *getDayName(time_t when)
83 {
84   SYSTEMTIME Time;
85   char *dayName;
86 
87   /* GetLocalTime(&Time); */
88   UnixTimeToSystemTime(when, &Time);
89   dayName = (char *)malloc(20);
90   if (GetDateFormat(LOCALE_USER_DEFAULT, 0, &Time, "dddd", dayName, 20) == 0)
91   {
92     printf("Error in GetDateFormat.\n");
93     return NULL;
94   }
95   return dayName;
96 }
97 #endif
98 
getSec()99 int getSec()
100 {
101   struct tm *mytime;
102   int sec = 0;
103 
104   mytime = getLocalTime((time_t *)NULL);
105   sec = mytime->tm_sec;
106 #ifndef WIN32
107   free(mytime);
108 #endif
109   return sec;
110 }
111 
getMinute()112 int getMinute()
113 {
114   struct tm *mytime;
115   int min = 0;
116 
117   mytime = getLocalTime((time_t *)NULL);
118   min = mytime->tm_min;
119 #ifndef WIN32
120   free(mytime);
121 #endif
122   return min;
123 }
124 
getYear()125 int getYear()
126 {
127   struct tm *mytime;
128   int year = 0;
129 
130   mytime = getLocalTime((time_t *)NULL);
131   year = mytime->tm_year;
132 #ifndef WIN32
133   free(mytime);
134 #endif
135   return year;
136 }
137 
getMonth()138 int getMonth()
139 {
140   struct tm *mytime;
141   int month = 0;
142 
143   mytime = getLocalTime((time_t *)NULL);
144   month = mytime->tm_mon;
145 #ifndef WIN32
146   free(mytime);
147 #endif
148   return month;
149 }
150