// UEBT - Utilities Epoch-Based Time. Like Unix time but in milliseconds. Epoch is the same. long long int dateTimeToUEBT(int year, int month, int day, int hour, int minute, int second, int millisecond) { long long int time = 0; int yr = 1970; int mt = 1; int days; if(year < yr) { while(year+1 < yr) { days = (isLeap(yr--) ? DAYS_PER_YEAR + 1 : DAYS_PER_YEAR); time -= (long long int)days * SECONDS_PER_DAY*1000LL; } mt = 12; while (month < mt) { if(mt!=2) days = getMonthDays(mt--); else { days = (isLeap(year)? 29 : 28); mt--; } time -= (long long int)days * SECONDS_PER_DAY*1000LL; } days = getMonthDays(month) - day + 1; time -= (long long int)days * SECONDS_PER_DAY*1000LL; time -= (long long int)(23LL-hour) * SECONDS_PER_HOUR*1000LL; time -= (long long int)(59LL-minute) * SECONDS_PER_MINUTE*1000LL; time -= (long long int)(59LL-second)*1000LL; time -= (long long int)(1000LL-millisecond); } else { while(yr < year) { days = (isLeap(yr++) ? DAYS_PER_YEAR + 1 : DAYS_PER_YEAR); time += (long long int)days * SECONDS_PER_DAY*1000LL; } while (mt < month) { if(mt!=2) days = getMonthDays(mt++); else { days = (isLeap(year)? 29 : 28); mt++; } time += (long long int)days * SECONDS_PER_DAY*1000LL; } days = day - 1; time += (long long int)days * SECONDS_PER_DAY*1000LL; time += (long long int)hour * SECONDS_PER_HOUR*1000LL; time += (long long int)minute * SECONDS_PER_MINUTE*1000LL; time += (long long int)second*1000LL; time += (long long int)millisecond; } return time; }
main() { int year; /* 西暦 */ int month; /* 月 */ int days; /* 月の日数 */ int youbi; /* 最初の日の曜日番号 */ getYearMonth(&year, &month); days = getMonthDays(year, month); youbi = getWeekDay(year, month, 1); printf("西暦%d年 %d月\n", year, month); PrintCalendar(days, youbi); }
Date & Date::addMonth(int month) { _tm.tm_mon = _tm.tm_mon + month; _tm.tm_year = _tm.tm_year + _tm.tm_mon/12; _tm.tm_mon = _tm.tm_mon % 12; int monthDays = getMonthDays(); if (_tm.tm_mday > monthDays) { _tm.tm_mday = monthDays; } return *this; }
Date & Date::addYear(int year) { _tm.tm_year += year; if (_tm.tm_year < 0) { _tm.tm_year = 0; } int monthDays = getMonthDays(); if (_tm.tm_mday > monthDays) { _tm.tm_mday = monthDays; } return *this; }
bool Date::isEndOfMonth() const { int curDay = day(); return curDay >= getMonthDays(); }