| 1 | #include "time_impl.h" |
| 2 | |
| 3 | long long __tm_to_secs(const struct tm *tm) |
| 4 | { |
| 5 | 	int is_leap; |
| 6 | 	long long year = tm->tm_year; |
| 7 | 	int month = tm->tm_mon; |
| 8 | 	if (month >= 12 || month < 0) { |
| 9 | 		int adj = month / 12; |
| 10 | 		month %= 12; |
| 11 | 		if (month < 0) { |
| 12 | 			adj--; |
| 13 | 			month += 12; |
| 14 | 		} |
| 15 | 		year += adj; |
| 16 | 	} |
| 17 | 	long long t = __year_to_secs(year, &is_leap); |
| 18 | 	t += __month_to_secs(month, is_leap); |
| 19 | 	t += 86400LL * (tm->tm_mday-1); |
| 20 | 	t += 3600LL * tm->tm_hour; |
| 21 | 	t += 60LL * tm->tm_min; |
| 22 | 	t += tm->tm_sec; |
| 23 | 	return t; |
| 24 | } |