williamr@2: // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@4: // under the terms of "Eclipse Public License v1.0" williamr@2: // which accompanies this distribution, and is available williamr@4: // at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // Defines TTsTime class, to represent UTC and Local Time for use within Task Scheduler williamr@2: // williamr@2: // williamr@2: williamr@2: williamr@2: #ifndef __SCHTIME_H__ williamr@2: #define __SCHTIME_H__ williamr@2: williamr@2: // System includes williamr@2: #include williamr@2: williamr@2: //Forward declarations williamr@2: class RWriteStream; williamr@2: class RReadStream; williamr@2: williamr@2: /** williamr@2: In Task Scheduler TTsTime is used to represent time as either UTC or Local Time. williamr@2: It is used by many of the Task Scheduler API's and also used internally within Task Scheduler. williamr@2: This class is not expected to be stored by Task Scheduler clients. williamr@2: williamr@2: It provides EXPORTed APIs for constructing, setting and getting UTC and Local Time. williamr@2: williamr@2: Internally the object always holds time as UTC (using the data member iUTC) irrespective of williamr@2: whether the object is local time based or UTC based. williamr@2: williamr@2: If the object is local time based iOffset will be set to the system TimeZone/DST offset. williamr@2: When UTC based iOffset will always be 0. williamr@2: williamr@2: Therefore: williamr@2: williamr@2: When representing UTC: williamr@2: iUTC contains the UTC time williamr@2: iOffSet is set to 0 williamr@2: iFlags, bit 0 is set to 1 williamr@2: williamr@2: When representing Local Time: williamr@2: iUTC contains the home time minus the TimeZone/DST offset williamr@2: iOffSet contains the TimeZone/DST offset williamr@2: iFlags, bit 0 is set to 0 williamr@2: williamr@2: If an instance of this class is created using the default constructor then: williamr@2: iUTC is set to 0 williamr@2: iOffSet is set to 0 williamr@2: iFlags, bit 0 is set to 1 (indicating UTC time) williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class TTsTime williamr@2: { williamr@2: public: williamr@2: williamr@2: IMPORT_C TTsTime(); williamr@2: williamr@2: IMPORT_C TTsTime(const TTime& aTime, TBool aIsUtc); williamr@2: williamr@2: IMPORT_C void SetLocalTime(const TTime& aLocalTime); williamr@2: williamr@2: IMPORT_C const TTime GetLocalTime(); williamr@2: williamr@2: IMPORT_C TTime GetLocalTime() const; williamr@2: williamr@2: IMPORT_C void SetUtcTime(const TTime& aUtcTime); williamr@2: williamr@2: IMPORT_C const TTime& GetUtcTime(); williamr@2: williamr@2: IMPORT_C const TTime& GetUtcTime() const; williamr@2: williamr@2: IMPORT_C TBool IsUtc() const; williamr@2: williamr@2: IMPORT_C TTsTime& operator=(const TTsTime& aTsTime); williamr@2: williamr@2: IMPORT_C TTsTime(const TTsTime& aTTsTime); williamr@2: williamr@2: public: williamr@2: // APIs for use within the Task Scheduler server williamr@2: williamr@2: void ExternalizeL(RWriteStream& aStream) const; williamr@2: williamr@2: void InternalizeL(RReadStream& aStream); williamr@2: williamr@2: void ProcessOffsetEvent(); williamr@2: williamr@2: inline TTimeIntervalSeconds GetOffset(); williamr@2: williamr@2: williamr@2: williamr@2: private: williamr@2: williamr@2: TTime DetermineLocalTime() const; williamr@2: williamr@2: /** williamr@2: This object always stores time as UTC irrespective of whether the object is home time or UTC based. williamr@2: */ williamr@2: TTime iUtcTime; williamr@2: williamr@2: /** williamr@2: If the object is UTC based then this will always be 0. If home time based then this will contain the value williamr@2: of system TimeZone/DST offset at the time that the object was created or last updated. williamr@2: */ williamr@2: TTimeIntervalSeconds iOffset; williamr@2: williamr@2: /** williamr@2: Bit 0 is set to 0 when UTC based, Bit 0 is set to 1 when home time based, Bit1-Bit31 are reserved for future use. williamr@2: */ williamr@2: TUint32 iFlags; williamr@2: williamr@2: }; williamr@2: williamr@2: /** williamr@2: This method must only be used by Task Scheduler itself as it returns raw offset data williamr@2: that can become out of date if system Timezone/DST changes occur. williamr@2: @internalComponent williamr@2: */ williamr@4: // Not for Client Use , Only to be used Internally. williamr@2: inline TTimeIntervalSeconds TTsTime::GetOffset() williamr@2: { williamr@2: return iOffset; williamr@2: } williamr@2: williamr@2: #endif