diff options
Diffstat (limited to 'firmware/common')
-rw-r--r-- | firmware/common/timefuncs.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/firmware/common/timefuncs.c b/firmware/common/timefuncs.c index 6fdc0b7240..f5097c8e52 100644 --- a/firmware/common/timefuncs.c +++ b/firmware/common/timefuncs.c | |||
@@ -193,3 +193,42 @@ time_t mktime(struct tm *t) | |||
193 | return(result); | 193 | return(result); |
194 | } | 194 | } |
195 | #endif | 195 | #endif |
196 | |||
197 | int day_of_week(int m, int d, int y) | ||
198 | { | ||
199 | char mo[12] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 }; | ||
200 | |||
201 | if(m == 0 || m == 1) y--; | ||
202 | return (d + mo[m] + y + y/4 - y/100 + y/400) % 7; | ||
203 | } | ||
204 | |||
205 | void yearday_to_daymonth(int yd, int y, int *d, int *m) | ||
206 | { | ||
207 | short t[12] = { 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; | ||
208 | int i; | ||
209 | |||
210 | if((y%4 == 0 && y%100 != 0) || y%400 == 0) | ||
211 | { | ||
212 | for(i=1;i<12;i++) | ||
213 | t[i]++; | ||
214 | } | ||
215 | |||
216 | yd++; | ||
217 | if(yd <= 31) | ||
218 | { | ||
219 | *d = yd; | ||
220 | *m = 0; | ||
221 | } | ||
222 | else | ||
223 | { | ||
224 | for(i=1;i<12;i++) | ||
225 | { | ||
226 | if(yd <= t[i]) | ||
227 | { | ||
228 | *d = yd - t[i-1]; | ||
229 | *m = i; | ||
230 | break; | ||
231 | } | ||
232 | } | ||
233 | } | ||
234 | } | ||