⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xdatetime.cpp

📁 BCB的学习资料
💻 CPP
📖 第 1 页 / 共 4 页
字号:
XInt XLongDate::CalcLongDate(const XDate & aDate)
{
    return CalcLongDate( aDate.GetYear(),aDate.GetMonth(),aDate.GetDay() );
}
XInt XLongDate::CalcLongDate(const TDateTime & aDateTime)
{
    XWord aYear,aMonth,aDay;
    aDateTime.DecodeDate( &aYear, &aMonth, &aDay );
    return CalcLongDate( aYear,aMonth,aDay );
}
XInt XLongDate::CalcLongDate(const XDateTime & aDateTime)
{
    return aDateTime.GetLongDate();
}
XInt XLongDate::CalcLongDate(int aYear,int aMonth,int aDay)
{
    int aDays = GetDays(aYear,aMonth,aDay);
    if( aDays == -1 ) throw XEDateTimeError();
    return aDays;
}
void XLongDate::Decode(int &aYear,int &aMonth,int &aDay) const
{
    int N400 = m_LongDate / 146097;
    int D = m_LongDate % 146097;
    int N100 = D / 36524;
    D = D % 36524;
    int N4 = D / 1461;
    D = D % 1461;
    int N = D / 365;
    D = D % 365;
    int NYear = N400 * 400 + N100 * 100 + N4 * 4 + N;
    int TDays = 0;
    if( D > 0)
    {
        NYear ++;
        aYear = NYear;
        for(int i=1;i<13;i++)
        {
            TDays += GetMonthDays(NYear,i);
            if( D <= TDays )
            {
                aMonth = i;
                aDay = D - TDays + GetMonthDays(NYear,i);
                break;
            }
        }
    }
    else
    {
        aYear = NYear;
        aMonth = 12;
        aDay = 31;
    }
}
void XLongDate::Decode(XDate & aDate) const
{
    int aYear,aMonth,aDay;
    Decode(aYear,aMonth,aDay);
    aDate.SetDate( aYear, aMonth, aDay);
}
XDate XLongDate::Decode() const
{
    XDate aDate;
    Decode(aDate);
    return aDate;
}

//operator-
XLongDate XLongDate::operator-(XInt aDays) const
{
    return  XLongDate( m_LongDate - aDays );
}
//operator+
XLongDate XLongDate::operator+(XInt aDays) const
{
    return  XLongDate( m_LongDate + aDays );
}
//operator-=
XLongDate & XLongDate::operator-=(XInt aDays)
{
    m_LongDate = RoundDate( m_LongDate - aDays); return *this;
}
//operator+=
XLongDate & XLongDate::operator+=(XInt aDays)
{
    m_LongDate = RoundDate( m_LongDate + aDays); return *this;
}

bool XLongDate::operator==(const XLongDate & aLongDate) const
{
    return m_LongDate == aLongDate.m_LongDate;
}
bool XLongDate::operator==(XInt aLongDate ) const
{
    return m_LongDate == RoundDate( aLongDate );
}
bool XLongDate::operator==(const XDateTime & aDateTime) const
{
    return m_LongDate == aDateTime.GetLongDate();
}
bool XLongDate::operator==(const XDate & aDate) const
{
    return m_LongDate == aDate.GetDays();
}
bool XLongDate::operator==(const TDateTime & aDateTime) const
{
    return m_LongDate == CalcLongDate(aDateTime);
}



bool XLongDate::operator!=(const XLongDate & aLongDate) const
{
    return m_LongDate != aLongDate.m_LongDate;
}
bool XLongDate::operator!=(XInt aLongDate ) const
{
    return m_LongDate != RoundDate( aLongDate );
}
bool XLongDate::operator!=(const XDateTime & aDateTime) const
{
    return m_LongDate != aDateTime.GetLongDate();
}
bool XLongDate::operator!=(const XDate & aDate) const
{
    return m_LongDate != aDate.GetDays();
}
bool XLongDate::operator!=(const TDateTime & aDateTime) const
{
    return m_LongDate != CalcLongDate(aDateTime);
}

bool XLongDate::operator>=(const XLongDate & aLongDate) const
{
    return m_LongDate >= aLongDate.m_LongDate;
}
bool XLongDate::operator>=(XInt aLongDate ) const
{
    return m_LongDate >= RoundDate( aLongDate );
}
bool XLongDate::operator>=(const XDateTime & aDateTime) const
{
    return m_LongDate >= aDateTime.GetLongDate();
}
bool XLongDate::operator>=(const XDate & aDate) const
{
    return m_LongDate >= aDate.GetDays();
}
bool XLongDate::operator>=(const TDateTime & aDateTime) const
{
    return m_LongDate >= CalcLongDate(aDateTime);
}


bool XLongDate::operator<=(const XLongDate & aLongDate) const
{
    return m_LongDate <= aLongDate.m_LongDate;
}
bool XLongDate::operator<=(XInt aLongDate ) const
{
    return m_LongDate <= RoundDate( aLongDate );
}
bool XLongDate::operator<=(const XDateTime & aDateTime) const
{
    return m_LongDate <= aDateTime.GetLongDate();
}
bool XLongDate::operator<=(const XDate & aDate) const
{
    return m_LongDate <= aDate.GetDays();
}
bool XLongDate::operator<=(const TDateTime & aDateTime) const
{
    return m_LongDate <= CalcLongDate(aDateTime);
}


bool XLongDate::operator<(const XLongDate & aLongDate) const
{
    return m_LongDate < aLongDate.m_LongDate;
}
bool XLongDate::operator<(XInt aLongDate ) const
{
    return m_LongDate < RoundDate( aLongDate );
}
bool XLongDate::operator<(const XDateTime & aDateTime) const
{
    return m_LongDate < aDateTime.GetLongDate();
}
bool XLongDate::operator<(const XDate & aDate) const
{
    return m_LongDate < aDate.GetDays();
}
bool XLongDate::operator<(const TDateTime & aDateTime) const
{
    return m_LongDate < CalcLongDate(aDateTime);
}

bool XLongDate::operator>(const XLongDate & aLongDate) const
{
    return m_LongDate > aLongDate.m_LongDate;
}
bool XLongDate::operator>(XInt aLongDate ) const
{
    return m_LongDate > RoundDate( aLongDate );
}
bool XLongDate::operator>(const XDateTime & aDateTime) const
{
    return m_LongDate > aDateTime.GetLongDate();
}
bool XLongDate::operator>(const XDate & aDate) const
{
    return m_LongDate > aDate.GetDays();
}
bool XLongDate::operator>(const TDateTime & aDateTime) const
{
    return m_LongDate > CalcLongDate(aDateTime);
}


    //求相差的天数
XInt XLongDate::operator-(const XLongDate & aLongDate) const
{
    return m_LongDate - aLongDate.m_LongDate;
}
XInt XLongDate::operator-(const XDate & aDate) const
{
    return m_LongDate - CalcLongDate( aDate );
}
XInt XLongDate::operator-(const XDateTime & aDateTime) const
{
    return m_LongDate - CalcLongDate( aDateTime );
}
XInt XLongDate::operator-(const TDateTime & aDateTime) const
{
    return m_LongDate - CalcLongDate( aDateTime );
}
//设置日期
void XLongDate::SetDate(int aYear,int aMonth,int aDay)
{
    m_LongDate = CalcLongDate(aYear,aMonth,aDay);
}
void XLongDate::SetDate(const XDate & aDate)
{
    m_LongDate = CalcLongDate( aDate );
}
void XLongDate::SetDate(const XLongDate & aLongDate)
{
    m_LongDate = aLongDate.m_LongDate;
}
void XLongDate::SetDate(const XDateTime & aDateTime)
{
    m_LongDate = CalcLongDate(aDateTime);
}
void XLongDate::SetDate(const TDateTime & aDateTime)
{
    m_LongDate = CalcLongDate(aDateTime);
}
XLongDate & XLongDate::operator++()
{
    m_LongDate = RoundDate( m_LongDate + 1 );
    return *this;
}
XLongDate XLongDate::operator++(int)
{
    XLongDate tmp(*this);
    m_LongDate = RoundDate( m_LongDate + 1 );
    return tmp;
}
XLongDate & XLongDate::operator--()
{
    m_LongDate = RoundDate( m_LongDate - 1 );
    return *this;
}
XLongDate XLongDate::operator--(int)
{
    XLongDate tmp(*this);
    m_LongDate = RoundDate( m_LongDate - 1 );
    return tmp;
}


XLongDate::operator XDate() const
{
    XDate aDate;
    Decode(aDate);
    return aDate;
}
XLongDate::operator TDateTime() const
{
    int aYear,aMonth,aDay;
    Decode(aYear, aMonth, aDay);
    return TDateTime((XWord)aYear, (XWord)aMonth, (XWord)aDay);
}
XLongDate::operator XDateTime() const
{
    XDateTime tmp(*this);
    return tmp;
}


//------------------------------------------------------------------------------
void XDate::SetDate(int aYear,int aMonth,int aDay)
{
    if( aYear<1 || aYear > 9999 ) throw XEDateTimeError(DATETIME_INVALIDATION_YEAR,aYear);
    if( aMonth<1 || aMonth > 12 ) throw XEDateTimeError(DATETIME_INVALIDATION_MONTH,aMonth);
    int aMonthDay = GetMonthDays( aYear, aMonth );
    if( aDay <1 || aDay > aMonthDay )
    {
        throw XEDateTimeError(DATETIME_INVALIDATION_DAY,aDay);
    }
    m_Year = (XWord)aYear;
    m_Month = (XByte)aMonth;
    m_Day = (XByte)aDay;
}
void XDate::SetDate(const XDate & aDate)
{
    m_Year = aDate.m_Year;
    m_Month = aDate.m_Month;
    m_Day = aDate.m_Day;
}
void XDate::SetDate(const XDateTime & aDateTime)
{
    aDateTime.DecodeDate( *this );
}
void XDate::SetDate(const TDateTime & aDateTime)
{
    XWord aYear,aMonth,aDay;
    aDateTime.DecodeDate( &aYear, &aMonth, &aDay );
    m_Year = aYear;
    m_Month = (XByte)aMonth;
    m_Day = (XByte)aDay;
}
void XDate::SetDate(const XLongDate & aLongDate)
{
    aLongDate.Decode( *this );
}

void XDate::SetYear(int aYear)
{
    if( aYear != m_Year )
    {
        int aDays = zdhsoft::GetDays( aYear, m_Month, m_Day );
        if( aDays == -1 )  throw XEDateTimeError();
        m_Year = (XWord)aYear;
    }
}
void XDate::SetMonth(int aMonth)
{
    if( aMonth != m_Month )
    {
        int aDays = zdhsoft::GetDays( m_Year, aMonth, m_Day );
        if( aDays == -1 )  throw XEDateTimeError();
        m_Month = (XByte)aMonth;
    }
}
void XDate::SetDay(int aDay)
{
    if( aDay != m_Day )
    {
        int aDays = zdhsoft::GetDays( m_Year, m_Month, aDay );
        if( aDays == -1 ) throw XEDateTimeError();
        m_Day = (XByte)aDay;
    }
}
int XDate::GetWeek() const
{
    return GetDays() % 7;
}

int XDate::GetDays() const
{
    return zdhsoft::GetDays(m_Year,m_Month,m_Day);
}

XDate::XDate()
    :m_Year(2000),m_Month(1),m_Day(1)
{
}
XDate::XDate(const XDate & aDate)
    :m_Year( aDate.m_Year ),
     m_Month( aDate.m_Month ),
     m_Day( aDate.m_Day )
{
}
XDate::XDate(const XDateTime & aDateTime)
{
    aDateTime.DecodeDate(*this);
}

XDate::XDate(const TDateTime & aDateTime)
{
    XWord aYear,aMonth,aDay;
    aDateTime.DecodeDate( &aYear,&aMonth,&aDay);
    m_Year = aYear;
    m_Month = aMonth;
    m_Day = aDay;
}
XDate::XDate(const XLongDate & aLongDate)
{
    int aYear,aMonth,aDay;
    aLongDate.Decode( aYear,aMonth,aDay);
    m_Year = (XWord)aYear;
    m_Month = (XByte)aMonth;
    m_Day = (XByte)aDay;
}
XDate::XDate(int aYear,int aMonth,int aDay)
{
    SetDate( aYear, aMonth, aDay );
}

XDate & XDate::operator = (const XDate & aDate )
{
    SetDate( aDate );
    return *this;
}
XDate & XDate::operator = (const XDateTime & aDateTime )
{
    SetDate( aDateTime );
    return *this;
}
XDate & XDate::operator = (const TDateTime & aDateTime )
{
    SetDate( aDateTime );
    return *this;
}
XDate & XDate::operator = (const XLongDate & aLongDate )
{
    SetDate( aLongDate );
    return *this;
}
AnsiString XDate::ToString()
{
    AnsiString strTmp;
    strTmp.printf("%04d-%02d-%02d",GetYear(),GetMonth(),GetDay());
    return strTmp;
}

//------------------------------------------------------------------------------

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -