2 * linux/kernel/mktime.c
4 * (C) 1991 Linus Torvalds
10 * This isn't the library routine, it is only used in the kernel.
11 * as such, we don't care about years<1970 etc, but assume everything
12 * is ok. Similarly, TZ etc is happily ignored. We just do everything
13 * as easily as possible. Let's find something public for the library
14 * routines (although I think minix times is public).
17 * PS. I hate whoever though up the year 1970 - couldn't they have gotten
18 * a leap-year instead? I also hate Gregorius, pope or no. I'm grumpy.
21 #define HOUR (60*MINUTE)
23 #define YEAR (365*DAY)
25 /* interestingly, we assume leap-years */
26 static int month
[12] = {
33 DAY
*(31+29+31+30+31+30),
34 DAY
*(31+29+31+30+31+30+31),
35 DAY
*(31+29+31+30+31+30+31+31),
36 DAY
*(31+29+31+30+31+30+31+31+30),
37 DAY
*(31+29+31+30+31+30+31+31+30+31),
38 DAY
*(31+29+31+30+31+30+31+31+30+31+30)
41 long kernel_mktime(struct tm
* tm
)
46 year
= tm
->tm_year
- 70;
47 /* magic offsets (y+1) needed to get leapyears right.*/
48 res
= YEAR
*year
+ DAY
*((year
+1)/4);
49 res
+= month
[tm
->tm_mon
];
50 /* and (y+2) here. If it wasn't a leap-year, we have to adjust */
51 if (tm
->tm_mon
>1 && ((year
+2)%4))
53 res
+= DAY
*(tm
->tm_mday
-1);
54 res
+= HOUR
*tm
->tm_hour
;
55 res
+= MINUTE
*tm
->tm_min
;