/// <summary> /// 判定给定的年月日是否是一个有效的日期 /// </summary> /// <param name="year">给定的年份</param> /// <param name="month">给定的月份</param> /// <param name="day">给定的日子</param> /// <returns>true:给定的年月日是一个有效的日期。false:不是一个有效的日期。</returns> bool CDateTime::ValidateDate(int year, int month, int day) { if (!ValidateDate(year, month)) return false; if ((day < 1) || (day > GetDaysOfMonth(year, month))) return false; return true; }
int BTS_Time(int year,int month,int day) { //days records the days between two dates int days=0,j; int std_year=BEIDOU_YEAR; int std_month=BEIDOU_MONTH; int std_day=BEIDOU_DAY; for(j=std_year;j<year;j++) days+=(IsLeapYear(j)?366:365); days+=GetDaysOfMonth(year,month,day); //divide 7 to count the weeks return (days/7+1); }
Date LastDayOfMonth(Date d) { d.day = GetDaysOfMonth(d.month, d.year); return d; }
CString *CTimer::GetTimeString (void) { m_TimeSpinLock.Acquire (); unsigned nTime = m_nTime; unsigned nTicks = m_nTicks; m_TimeSpinLock.Release (); if ( nTime == 0 && nTicks == 0) { return 0; } unsigned nSecond = nTime % 60; nTime /= 60; unsigned nMinute = nTime % 60; nTime /= 60; unsigned nHours = nTime; unsigned nHour = nTime % 24; nTime /= 24; unsigned nYear = 1970; while (1) { unsigned nDaysOfYear = IsLeapYear (nYear) ? 366 : 365; if (nTime < nDaysOfYear) { break; } nTime -= nDaysOfYear; nYear++; } unsigned nMonth = 0; while (1) { unsigned nDaysOfMonth = GetDaysOfMonth (nMonth, nYear); if (nTime < nDaysOfMonth) { break; } nTime -= nDaysOfMonth; nMonth++; } unsigned nMonthDay = nTime + 1; nTicks %= HZ; #if (HZ != 100) nTicks = nTicks * 100 / HZ; #endif CString *pString = new CString; assert (pString != 0); if (nYear > 1975) { pString->Format ("%s %2u %02u:%02u:%02u.%02u", s_pMonthName[nMonth], nMonthDay, nHour, nMinute, nSecond, nTicks); } else { pString->Format ("%02u:%02u:%02u.%02u", nHours, nMinute, nSecond, nTicks); } return pString; }
bool Date::IsValid() const { return year == -32768 || month >= 1 && month <= 12 && day >= 1 && day <= GetDaysOfMonth(month, year); }