예제 #1
0
void cavan_time_parse(unsigned long timestamp, struct cavan_time *time, u32 base_days)
{
	u32 year;
	u32 remain;
	unsigned long days;
	const u16 *p, *yday;

	days = timestamp / CAVAN_TIME_SECONDS_PER_DAY + base_days;
	time->wday = days % 7;
	year = days / 366;

	while (cavan_time_get_days_of_year(year + 1, 0, 1) <= days)
	{
		year++;
	}

	yday = cavan_time_mon_yday[cavan_time_year_is_leap(year)];
	days -= cavan_time_get_days_of_year(year, 0, 1);
	for (p = yday + 11; *p > days; p--);

	time->year = year;
	time->month = p - yday;
	time->mday = days - *p + 1;
	time->yday = days;

	remain = timestamp % CAVAN_TIME_SECONDS_PER_DAY;
	time->hour = remain / CAVAN_TIME_SECONDS_PER_HOUR;
	time->minute = remain % CAVAN_TIME_SECONDS_PER_HOUR / CAVAN_TIME_SECONDS_PER_MIN;
	time->second = timestamp % CAVAN_TIME_SECONDS_PER_MIN;
}
예제 #2
0
파일: time.c 프로젝트: FuangCao/cavan
u32 cavan_time_get_days_of_year(u32 year, u8 month, u8 day)
{
	u32 days = year * 365 + day;
	const u16 *yday = cavan_time_mon_yday[cavan_time_year_is_leap(year)];

	if (year > 0) {
		year--;
	}

	return year / 4 - year / 100 + year / 400 + yday[month] + days - 1;
}