From 460c52653ab0dcca6f19a4f492ed2c5e4e963ab0 Mon Sep 17 00:00:00 2001 From: toma Date: Wed, 25 Nov 2009 17:56:58 +0000 Subject: Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features. BUG:215923 git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdepim@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- mimelib/mimelib/datetime.h | 350 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 350 insertions(+) create mode 100644 mimelib/mimelib/datetime.h (limited to 'mimelib/mimelib/datetime.h') diff --git a/mimelib/mimelib/datetime.h b/mimelib/mimelib/datetime.h new file mode 100644 index 00000000..d23eba0b --- /dev/null +++ b/mimelib/mimelib/datetime.h @@ -0,0 +1,350 @@ +//============================================================================= +// File: datetime.h +// Contents: Declarations for DwDateTime +// Maintainer: Doug Sauder +// WWW: http://www.fwb.gulf.net/~dwsauder/mimepp.html +// +// Copyright (c) 1996, 1997 Douglas W. Sauder +// All rights reserved. +// +// IN NO EVENT SHALL DOUGLAS W. SAUDER BE LIABLE TO ANY PARTY FOR DIRECT, +// INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF +// THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF DOUGLAS W. SAUDER +// HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// DOUGLAS W. SAUDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT +// NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +// PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" +// BASIS, AND DOUGLAS W. SAUDER HAS NO OBLIGATION TO PROVIDE MAINTENANCE, +// SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. +// +//============================================================================= + +#ifndef DW_DATETIME_H +#define DW_DATETIME_H + +#include + +#ifndef DW_CONFIG_H +#include +#endif + +#ifndef DW_FIELDBDY_H +#include +#endif + +//============================================================================= +//+ Name DwDateTime -- Class representing an RFC-822 date-time +//+ Description +//. {\tt DwDatetime} represents a {\it date-time} as described in RFC-822 +//. and RFC-1123. The parse method for {\tt DwDateTime} parses the +//. string representation to extract the year, month, day, hour, minute, +//. second, and time zone. {\tt DwDateTime} provides member functions +//. to set or get the individual components of the date-time. +//============================================================================= +// Last modified 1997-08-23 +//+ Noentry ~DwDateTime mYear mMonth mDay mHour mMinute mSecond mZone +//+ Noentry sDefaultZone sIsDefaultZoneSet _PrintDebugInfo + + +class DW_EXPORT DwDateTime : public DwFieldBody { + +public: + + DwDateTime(); + DwDateTime(const DwDateTime& aDateTime); + DwDateTime(const DwString& aStr, DwMessageComponent* aParent=0); + //. The first constructor is the default constructor, which assigns + //. the current date and time as reported by the operating system. + //. + //. The second constructor is the copy constructor. The parent of + //. the new {\tt DwDateTime} object is set to {\tt NULL}. + //. + //. The third constructor sets {\tt aStr} as the {\tt DwDateTime} + //. object's string representation and sets {\tt aParent} as its parent. + //. The virtual member function {\tt Parse()} should be called after + //. this constructor to extract the date and time information from the + //. string representation. Unless it is {\tt NULL}, {\tt aParent} should + //. point to an object of a class derived from {\tt DwField}. + + virtual ~DwDateTime(); + + const DwDateTime& operator = (const DwDateTime& aDateTime); + //. This is the assignment operator, which sets this {\tt DwDateTime} + //. object to the same value as {\tt aDateTime}. + + virtual void Parse(); + //. This virtual function, inherited from {\tt DwMessageComponent}, + //. executes the parse method for {\tt DwDateTime} objects. The parse + //. method creates or updates the broken-down representation from the + //. string representation. For {\tt DwDateTime} objects, the parse + //. method parses the string representation to extract the year, + //. month, day, hour, minute, second, and time zone. + //. + //. This function clears the is-modified flag. + + virtual void Assemble(); + //. This virtual function, inherited from {\tt DwMessageComponent}, + //. executes the assemble method for {\tt DwDateTime} objects. + //. It should be called whenever one of the object's attributes + //. is changed in order to assemble the string representation from + //. its broken-down representation. It will be called + //. automatically for this object by the parent object's + //. {\tt Assemble()} member function if the is-modified flag is set. + //. + //. This function clears the is-modified flag. + + virtual DwMessageComponent* Clone() const; + //. This virtual function, inherited from {\tt DwMessageComponent}, + //. creates a new {\tt DwDateTime} on the free store that has the same + //. value as this {\tt DwDateTime} object. The basic idea is that of + //. a virtual copy constructor. + + DwUint32 AsUnixTime() const; + //. Returns the date and time as a UNIX (POSIX) time, defined as the + //. number of seconds elapsed since 1 Jan 1970 00:00:00 UTC. + + void FromUnixTime(DwUint32 aTime); + //. Sets the date and time from {\tt aTime}, interpreted as the number of + //. of seconds elapsed since 1 Jan 1970 00:00:00 UTC. + + void FromCalendarTime(time_t aTime); + //. Sets the date and time from {\tt aTime}, which is assumed to be in a + //. format compatible with the native {\tt time()} ANSI C function. + //. For most UNIX systems, this function is the same as the function + //. {\tt FromUnixTime()}. (For efficiency, use {\tt FromUnixTime()} + //. instead of {\tt FromCalendarTime()} if possible). + + DwInt32 DateAsJulianDayNum() const; + //. Returns the Julian Day Number, defined as the number of days elapsed + //. since 1 Jan 4713 BC. The JDN is calculated directly from the values + //. of the year, month, and day; time zone information is ignored. + + void DateFromJulianDayNum(DwInt32 aJdn); + //. Sets the year, month, and day from {\tt aJdn}, interpreted as a Julian + //. Day Number. By definition, the JDN is the number of days elapsed + //. since 1 Jan 4713 BC. This member function ignores time zone + //. information. + + DwInt32 TimeAsSecsPastMidnight() const; + //. Returns the number of seconds past midnight. The value is + //. calculated directly from the values of the hour, minute, and + //. second; time zone information is ignored. + + void TimeFromSecsPastMidnight(DwInt32 aSecs); + //. Sets the hour, minute, and second from {\tt aSecs}, interpreted as the + //. number of seconds elapsed since midnight. This member function + //. ignores time zone information. The argument {\tt aSecs} should be in + //. the range 0 to 86399, inclusive. + + int Year() const; + //. Returns the four digit year, e.g. 1997. + + void SetYear(int aYear); + //. Sets the year from {\tt aYear}, which should be a four digit year. + + int Month() const; + //. Returns the month. Values range from 1 to 12. + + void SetMonth(int aMonth); + //. Sets the month from {\tt aMonth}, which should be in the range 1 + //. to 12. + + int Day() const; + //. Returns the day of the month. Values range from 1 to 31. + + void SetDay(int aDay); + //. Sets the day of the month from {\tt aDay}. + + int Hour() const; + //. Returns the hour according to the 24 hour clock. + //. Values range from 0 to 23. + + void SetHour(int aHour); + //. Sets the hour from {\tt aHour} based on the 24-hour clock. {\tt aHour} + //. should be in the range 0 to 23. + + int Minute() const; + //. Returns the minute. Values range from 0 to 59. + + void SetMinute(int aMinute); + //. Sets the minute from {\tt aMinute}, which should be in the range 0 + //. to 59. + + int Second() const; + //. Returns the second. Values range from 0 to 59. + + void SetSecond(int aSecond); + //. Sets the second from {\tt aSecond}, which should be in the range 0 + //. to 59. + + int Zone() const; + //. Returns the time zone as the diffence in minutes between local time + //. and Coordinated Universal Time (UTC or GMT). + + void SetZone(int aZone); + //. Sets the time zone from {\tt aZone}, interpreted as the time difference + //. in minutes between local time and Coordinated Universal Time + //. (UTC, or GMT). + + static void SetDefaultZone(int aZone); + //. Sets the default time zone. {\tt aZone} should be the time difference + //. in minutes between local time and Coordinated Universal Time + //. (UTC, or GMT). The value is used to set the time zone for any + //. objects created using the default constructor. + + static DwDateTime* NewDateTime(const DwString&, DwMessageComponent*); + //. Creates a new {\tt DwDateTime} object on the free store. + //. If the static data member {\tt sNewDateTime} is {\tt NULL}, + //. this member function will create a new {\tt DwDateTime} + //. and return it. Otherwise, {\tt NewDateTime()} will call + //. the user-supplied function pointed to by {\tt sNewDateTime}, + //. which is assumed to return an object from a class derived from + //. {\tt DwDateTime}, and return that object. + + //+ Var sNewDateTime + static DwDateTime* (*sNewDateTime)(const DwString&, DwMessageComponent*); + //. If {\tt sNewDateTime} is not {\tt NULL}, it is assumed to point to a + //. user-supplied function that returns an object from a class derived + //. from {\tt DwDateTime}. + +protected: + + void _FromUnixTime(DwUint32 aTime); + //. Like {\tt FromUnixTime()}, but doesn't set the is-modified flag. + + void _FromCalendarTime(time_t aTime); + //. Like {\tt FromCalendarTime()}, but doesn't set the is-modified flag. + + int mYear; + int mMonth; + int mDay; + int mHour; + int mMinute; + int mSecond; + int mZone; + + static int sDefaultZone; + static int sIsDefaultZoneSet; + +private: + + static const char* const sClassName; + + void Init(); + //. Initialization code common to all constructors. + +public: + + virtual void PrintDebugInfo(std::ostream& aStrm, int aDepth=0) const; + //. This virtual function, inherited from {\tt DwMessageComponent}, + //. prints debugging information about this object to {\tt aStrm}. + //. + //. This member function is available only in the debug version of + //. the library. + + virtual void CheckInvariants() const; + //. Aborts if one of the invariants of the object fails. Use this + //. member function to track down bugs. + //. + //. This member function is available only in the debug version of + //. the library. + +protected: + + void _PrintDebugInfo(std::ostream& aStrm) const; + +}; + + +inline int DwDateTime::Year() const +{ + return mYear; +} + + +inline int DwDateTime::Month() const +{ + return mMonth; +} + + +inline int DwDateTime::Day() const +{ + return mDay; +} + + +inline int DwDateTime::Hour() const +{ + return mHour; +} + + +inline int DwDateTime::Minute() const +{ + return mMinute; +} + + +inline int DwDateTime::Second() const +{ + return mSecond; +} + + +inline int DwDateTime::Zone() const +{ + return mZone; +} + + +inline void DwDateTime::SetYear(int aYear) +{ + mYear = aYear; + SetModified(); +} + + +inline void DwDateTime::SetMonth(int aMonth) +{ + mMonth = aMonth; + SetModified(); +} + + +inline void DwDateTime::SetDay(int aDay) +{ + mDay = aDay; + SetModified(); +} + + +inline void DwDateTime::SetHour(int aHour) +{ + mHour = aHour; + SetModified(); +} + + +inline void DwDateTime::SetMinute(int aMinute) +{ + mMinute = aMinute; + SetModified(); +} + + +inline void DwDateTime::SetSecond(int aSecond) +{ + mSecond = aSecond; + SetModified(); +} + + +inline void DwDateTime::SetZone(int aZone) +{ + mZone = aZone; + SetModified(); +} + +#endif -- cgit v1.2.3