123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- /***************************************************************************
- * E-Com Technology Ltd.
- *
- * ECOMPACS DICOM Network Transport Libraries * Version 0.1 Beta
- ***************************************************************************/
- #ifndef _DICOM_DATETIME_
- #define _DICOM_DATETIME_
- typedef double DATE;
- class DDateTimeSpan;
- /////////////////////////////////////////////////////////////////////////////
- // DDateTime class helpers
- #define DDATETIME_ERROR (-1)
- #define DDATETIME_HALFSECOND (1.0 / (2.0 * (60.0 * 60.0 * 24.0)))
- /////////////////////////////////////////////////////////////////////////////
- // DDateTime class
- class DICOM_API DDateTime
- {
- // Constructors
- public:
- static DDateTime PASCAL GetCurrentTime ();
- DDateTime ();
- DDateTime (const DDateTime & dateSrc);
- DDateTime (DATE dtSrc);
- DDateTime (time_t timeSrc);
- DDateTime (int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec);
- DDateTime (const char * DateString, const char * TimeStr);
- DDateTime (WORD wDosDate, WORD wDosTime, int nDST);
- // Attributes
- public:
- enum DateTimeStatus
- {
- valid = 0,
- invalid = 1, // Invalid date (out of range, etc.)
- null = 2, // Literally has no value
- };
- DATE m_dt;
- DateTimeStatus m_status;
- void SetStatus (DateTimeStatus status);
- DateTimeStatus GetStatus () const;
- int GetYear () const;
- int GetMonth () const; // month of year (1 = Jan)
- int GetDay () const; // day of month (0-31)
- int GetHour () const; // hour in day (0-23)
- int GetMinute () const; // minute in hour (0-59)
- int GetSecond () const; // second in minute (0-59)
- int GetDayOfWeek () const; // 1=Sun, 2=Mon, ..., 7=Sat
- int GetDayOfYear () const; // days since start of year, Jan 1 = 1
- bool IsSunday () const { return (GetDayOfWeek () == 1); }
- bool IsMonday () const { return (GetDayOfWeek () == 2); }
- bool IsTuesday () const { return (GetDayOfWeek () == 3); }
- bool IsWednesday () const { return (GetDayOfWeek () == 4); }
- bool IsThursday () const { return (GetDayOfWeek () == 5); }
- bool IsFriday () const { return (GetDayOfWeek () == 6); }
- bool IsSaturday () const { return (GetDayOfWeek () == 7); }
- // Operations
- public:
- const DDateTime & operator = (const DDateTime & dateSrc);
- const DDateTime & operator = (DATE dtSrc);
- const DDateTime & operator = (const time_t & timeSrc);
- BOOL operator == (const DDateTime & date) const;
- BOOL operator != (const DDateTime & date) const;
- BOOL operator < (const DDateTime & date) const;
- BOOL operator > (const DDateTime & date) const;
- BOOL operator <= (const DDateTime & date) const;
- BOOL operator >= (const DDateTime & date) const;
- // DateTime math
- DDateTime operator + (const DDateTimeSpan & dateSpan) const;
- DDateTime operator - (const DDateTimeSpan & dateSpan) const;
- const DDateTime & operator += (const DDateTimeSpan dateSpan);
- const DDateTime & operator -= (const DDateTimeSpan dateSpan);
- // DateTimeSpan math
- DDateTimeSpan operator - (const DDateTime & date) const;
- operator DATE () const;
- int SetDateTime (int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec);
- int SetDate (int nYear, int nMonth, int nDay);
- int SetTime (int nHour, int nMin, int nSec);
- int SetDateTime (const char * DateStr, const char * TimeStr);
- // 保留时间不变,但是日期用DateStr中的日期
- int SetDate (const char * DateStr);
- // 保留日期不变,但是时间设置为TimeStr中的日期
- int SetTime (const char * TimeStr);
- // formatting
- DString Format (LPCTSTR lpszFormat) const;
- DString ToString (LPCTSTR lpszFormat) const
- {
- return Format (lpszFormat);
- }
- DString FormatDate (void) const;
- DString FormatTime (void) const;
- // Implementation
- protected:
- void CheckRange ();
- friend class DDateTimeSpan;
- };
- /////////////////////////////////////////////////////////////////////////////
- // DDateTimeSpan class
- class DICOM_API DDateTimeSpan
- {
- // Constructors
- public:
- DDateTimeSpan ();
- DDateTimeSpan (double dblSpanSrc);
- DDateTimeSpan (const DDateTimeSpan & dateSpanSrc);
- DDateTimeSpan (long lDays, int nHours, int nMins, int nSecs);
- DDateTimeSpan (const char * SpanString);
- // Attributes
- public:
- enum DateTimeSpanStatus
- {
- valid = 0,
- invalid = 1, // Invalid span (out of range, etc.)
- null = 2, // Literally has no value
- };
- double m_span;
- DateTimeSpanStatus m_status;
- void SetStatus (DateTimeSpanStatus status);
- DateTimeSpanStatus GetStatus () const;
- double GetTotalDays () const; // span in days (about -3.65e6 to 3.65e6)
- double GetTotalHours () const; // span in hours (about -8.77e7 to 8.77e6)
- double GetTotalMinutes () const; // span in minutes (about -5.26e9 to 5.26e9)
- double GetTotalSeconds () const; // span in seconds (about -3.16e11 to 3.16e11)
- long GetDays () const; // component days in span
- long GetHours () const; // component hours in span (-23 to 23)
- long GetMinutes () const; // component minutes in span (-59 to 59)
- long GetSeconds () const; // component seconds in span (-59 to 59)
- // Operations
- public:
- const DDateTimeSpan & operator = (double dblSpanSrc);
- const DDateTimeSpan & operator = (const DDateTimeSpan & dateSpanSrc);
- BOOL operator == (const DDateTimeSpan & dateSpan) const;
- BOOL operator != (const DDateTimeSpan & dateSpan) const;
- BOOL operator < (const DDateTimeSpan & dateSpan) const;
- BOOL operator > (const DDateTimeSpan & dateSpan) const;
- BOOL operator <= (const DDateTimeSpan & dateSpan) const;
- BOOL operator >= (const DDateTimeSpan & dateSpan) const;
- // DateTimeSpan math
- DDateTimeSpan operator + (const DDateTimeSpan & dateSpan) const;
- DDateTimeSpan operator - (const DDateTimeSpan & dateSpan) const;
- const DDateTimeSpan & operator += (const DDateTimeSpan dateSpan);
- const DDateTimeSpan & operator -= (const DDateTimeSpan dateSpan);
- DDateTimeSpan operator - () const;
- operator double () const;
- void SetDateTimeSpan (long lDays, int nHours, int nMins, int nSecs);
- // formatting
- DString Format (LPCTSTR lpszFormat) const;
- DString ToString (LPCTSTR lpszFormat) const
- {
- return Format (lpszFormat);
- }
- // Implementation
- public:
- void CheckRange ();
- friend class DDateTime;
- };
- // DDateTime
- __inline DDateTime::DDateTime ()
- { m_dt = 0; SetStatus (valid); }
- __inline DDateTime::DDateTime (const DDateTime & dateSrc)
- { m_dt = dateSrc.m_dt; m_status = dateSrc.m_status; }
- __inline DDateTime::DDateTime (DATE dtSrc)
- { m_dt = dtSrc; SetStatus (valid); }
- __inline DDateTime::DDateTime (time_t timeSrc)
- { *this = timeSrc; }
- __inline DDateTime::DDateTime (int nYear, int nMonth, int nDay, int nHour, int nMin, int nSec)
- { SetDateTime (nYear, nMonth, nDay, nHour, nMin, nSec); }
- __inline const DDateTime& DDateTime::operator = (const DDateTime& dateSrc)
- { m_dt = dateSrc.m_dt; m_status = dateSrc.m_status; return *this; }
- __inline DDateTime::DateTimeStatus DDateTime::GetStatus () const
- { return m_status; }
- __inline void DDateTime::SetStatus (DateTimeStatus status)
- { m_status = status; }
- __inline BOOL DDateTime::operator == (const DDateTime& date) const
- { return (m_status == date.m_status && m_dt == date.m_dt); }
- __inline BOOL DDateTime::operator != (const DDateTime& date) const
- { return (m_status != date.m_status || m_dt != date.m_dt); }
- __inline const DDateTime & DDateTime::operator += (const DDateTimeSpan dateSpan)
- { *this = *this + dateSpan; return *this; }
- __inline const DDateTime & DDateTime::operator -= (const DDateTimeSpan dateSpan)
- { *this = *this - dateSpan; return *this; }
- __inline DDateTime::operator DATE () const
- { return m_dt; }
- __inline int DDateTime::SetDate (int nYear, int nMonth, int nDay)
- { return SetDateTime (nYear, nMonth, nDay, 0, 0, 0); }
- __inline int DDateTime::SetTime (int nHour, int nMin, int nSec)
- // Set date to zero date - 12/30/1899
- { return SetDateTime (1899, 12, 30, nHour, nMin, nSec); }
- // DDateTimeSpan
- __inline DDateTimeSpan::DDateTimeSpan ()
- { m_span = 0; SetStatus (valid); }
- __inline DDateTimeSpan::DDateTimeSpan (double dblSpanSrc)
- { m_span = dblSpanSrc; SetStatus (valid); }
- __inline DDateTimeSpan::DDateTimeSpan (const DDateTimeSpan& dateSpanSrc)
- { m_span = dateSpanSrc.m_span; m_status = dateSpanSrc.m_status; }
- __inline DDateTimeSpan::DDateTimeSpan (long lDays, int nHours, int nMins, int nSecs)
- { SetDateTimeSpan (lDays, nHours, nMins, nSecs); }
- __inline DDateTimeSpan::DateTimeSpanStatus DDateTimeSpan::GetStatus () const
- { return m_status; }
- __inline void DDateTimeSpan::SetStatus (DateTimeSpanStatus status)
- { m_status = status; }
- __inline double DDateTimeSpan::GetTotalDays () const
- {
- // ASSERT (GetStatus () == valid);
- return m_span;
- }
- __inline double DDateTimeSpan::GetTotalHours () const
- {
- // ASSERT (GetStatus () == valid);
- long lReturns = (long) (m_span * 24 + DDATETIME_HALFSECOND);
- return lReturns;
- }
- __inline double DDateTimeSpan::GetTotalMinutes () const
- {
- // ASSERT (GetStatus () == valid);
- long lReturns = (long) (m_span * 24 * 60 + DDATETIME_HALFSECOND);
- return lReturns;
- }
- __inline double DDateTimeSpan::GetTotalSeconds () const
- {
- // ASSERT (GetStatus () == valid);
- long lReturns = (long) (m_span * 24 * 60 * 60 + DDATETIME_HALFSECOND);
- return lReturns;
- }
- __inline long DDateTimeSpan::GetDays () const
- {
- // ASSERT (GetStatus () == valid);
- return (long)m_span;
- }
- __inline BOOL DDateTimeSpan::operator == (const DDateTimeSpan& dateSpan) const
- { return (m_status == dateSpan.m_status && m_span == dateSpan.m_span); }
- __inline BOOL DDateTimeSpan::operator != (const DDateTimeSpan& dateSpan) const
- { return (m_status != dateSpan.m_status || m_span != dateSpan.m_span); }
- __inline BOOL DDateTimeSpan::operator < (const DDateTimeSpan& dateSpan) const
- {
- // ASSERT (GetStatus () == valid);
- // ASSERT (dateSpan.GetStatus () == valid);
- return m_span < dateSpan.m_span;
- }
- __inline BOOL DDateTimeSpan::operator > (const DDateTimeSpan& dateSpan) const
- {
- // ASSERT (GetStatus () == valid);
- // ASSERT (dateSpan.GetStatus () == valid);
- return m_span > dateSpan.m_span;
- }
- __inline BOOL DDateTimeSpan::operator <= (const DDateTimeSpan& dateSpan) const
- {
- // ASSERT (GetStatus () == valid);
- // ASSERT (dateSpan.GetStatus () == valid);
- return m_span <= dateSpan.m_span;
- }
- __inline BOOL DDateTimeSpan::operator >= (const DDateTimeSpan& dateSpan) const
- {
- // ASSERT (GetStatus () == valid);
- // ASSERT (dateSpan.GetStatus () == valid);
- return m_span >= dateSpan.m_span;
- }
- __inline const DDateTimeSpan& DDateTimeSpan::operator += (const DDateTimeSpan dateSpan)
- { *this = *this + dateSpan; return *this; }
- __inline const DDateTimeSpan& DDateTimeSpan::operator -= (const DDateTimeSpan dateSpan)
- { *this = *this - dateSpan; return *this; }
- __inline DDateTimeSpan DDateTimeSpan::operator - () const
- { return -this->m_span; }
- __inline DDateTimeSpan::operator double () const
- { return m_span; }
- #endif
|