// 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;
}
示例#2
0
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);
}
示例#3
0
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;
}
示例#4
0
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;
}
示例#5
0
bool Date::isEndOfMonth() const
{
	int curDay = day();
	return curDay >= getMonthDays();
}