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@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.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: // williamr@2: williamr@2: #ifndef __VTZRULES_H__ williamr@2: #define __VTZRULES_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: class CVTzActualisedRules; williamr@2: class TVTzActualisedRule; williamr@2: williamr@2: const TInt KVTzRulesGranularity = 4; williamr@2: williamr@2: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * williamr@2: * Time zone rules williamr@2: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ williamr@2: williamr@2: /** williamr@2: Encapsulates one time zone rule. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class TTzRule williamr@2: { williamr@2: public: williamr@2: IMPORT_C TTzRule(TInt16 aFromYear, TInt16 aToYear, TInt16 aOldOffset, TInt16 aNewOffset, TMonth aMonth, TTzRuleDay aDayRule, williamr@2: TUint8 aDayOfMonth, TUint8 aDayOfWeek, TTzTimeReference aTimeReference, TUint16 aTimeOfChange); williamr@2: IMPORT_C TTzRule(); williamr@2: IMPORT_C TTzRule(const TTzRule& aRule); williamr@2: IMPORT_C TTzRule(TTimeWithReference aFromYear, TTimeWithReference aToYear, TInt16 aOldOffset, TInt16 aNewOffset, TMonth aMonth, TTzRuleDay aDayRule, williamr@2: TUint8 aDayOfMonth, TUint8 aDayOfWeek, TTzTimeReference aTimeReference, TUint16 aTimeOfChange); williamr@2: williamr@2: williamr@2: void ExternalizeL(RWriteStream& aStream) const; williamr@2: void InternalizeL(RReadStream& aStream); williamr@2: TBool RuleApplies(const TTime& aStart, const TTime& aEnd) const; williamr@2: williamr@2: IMPORT_C TVTzActualisedRule Actualise(TInt aYear) const; // deprecated, replace by the L version williamr@2: IMPORT_C TVTzActualisedRule ActualiseL(TInt aYear) const; williamr@2: williamr@2: public: williamr@2: TTimeWithReference iFrom; // first date the rule applies williamr@2: TTimeWithReference iTo; // last date the rule applies williamr@2: TInt16 iOldLocalTimeOffset; // local time offset (in minutes) BEFORE the change (local time = UTC + DST) williamr@2: TInt16 iNewLocalTimeOffset; // local time offset (in minutes) AFTER the change williamr@2: TMonth iMonth; williamr@2: TTzRuleDay iDayRule; // format in which the rule is expressed williamr@2: TUint8 iDayOfMonth; williamr@2: TUint8 iDayOfWeek; williamr@2: TTzTimeReference iTimeReference; williamr@2: TUint16 iTimeOfChange; // number of minutes since midnight williamr@2: TUint32 iReserved; williamr@2: }; williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: Encapsulates a collection of time zone rules, and includes the period covered by the rules williamr@2: and the standard time offset at the start of that period. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class CTzRules : public CBase williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CTzRules* NewL(); williamr@2: IMPORT_C static CTzRules* NewL(TInt aStartYear, TInt aEndYear); williamr@2: IMPORT_C static CTzRules* NewL(RReadStream& aStream); williamr@2: IMPORT_C ~CTzRules(); williamr@2: IMPORT_C TBool RulesApply(const TTime& aTime) const; williamr@2: IMPORT_C void AddRuleL(TTzRule aRule); williamr@2: IMPORT_C void RemoveRule(TInt aIndex); williamr@2: IMPORT_C TTzRule& operator[](TInt aIndex); williamr@2: IMPORT_C TInt Count() const; williamr@2: IMPORT_C TInt StartYear() const; williamr@2: IMPORT_C TInt EndYear() const; williamr@2: IMPORT_C void SetStartYear(TInt aYear); williamr@2: IMPORT_C void SetEndYear(TInt aYear); williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream) const; williamr@2: IMPORT_C void InternalizeL(RReadStream& aStream); williamr@2: IMPORT_C TInt InitialStdTimeOffset() const; williamr@2: IMPORT_C void SetInitialStdTimeOffset(TInt aOffset); williamr@2: IMPORT_C void ConvertToUtcL(TTime& aLocalTime) const; williamr@2: IMPORT_C void ConvertToLocalL(TTime& aUtcTime) const; williamr@2: IMPORT_C CTzRules* CloneL() const; williamr@2: IMPORT_C TBool IsEqualTo(const CTzRules& aRules) const; williamr@2: williamr@2: IMPORT_C void GetActualisedRulesL(CVTzActualisedRules& aActRules) const; williamr@2: IMPORT_C TInt ConvertTime(CVTzActualisedRules& aRules, TTime& aTime, TTzTimeReference aTimerRef) const; williamr@2: williamr@2: private: williamr@2: CTzRules(); williamr@2: CTzRules(TInt aStartYear, TInt aEndYear); williamr@2: void GetActualisedRulesL(CVTzActualisedRules& aActRules, TInt aYear) const; williamr@2: TInt GetOffsetL(const TTime& aTime, TTzTimeReference aTimeRef) const; williamr@2: TInt AddActualisedRulesL(CVTzActualisedRules& aActRules, TInt aYear) const; williamr@2: TInt CompareTimesWithRef(TTime aTimeA, TTzTimeReference aTimeARef, williamr@2: TTime aTimeB, TTzTimeReference aTimeBRef, TInt aStdOffset, TInt aWallOffset, williamr@2: TTimeIntervalMinutes* aMinutesDifference) const; williamr@2: williamr@2: private: williamr@2: TInt16 iStartYear; williamr@2: TInt16 iEndYear; williamr@2: RArray iRules; williamr@2: TInt iInitialStdTimeOffset; williamr@2: }; williamr@2: williamr@2: williamr@2: williamr@2: /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * williamr@2: * Actualised time zone rules williamr@2: * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ williamr@2: williamr@2: /** williamr@2: Encapsulates a local time change. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: class TVTzActualisedRule williamr@2: { williamr@2: public: williamr@2: IMPORT_C TVTzActualisedRule(TTime aTimeOfChange, TInt aNewOffset, TTzTimeReference aTimeReference); williamr@2: IMPORT_C TVTzActualisedRule(); williamr@2: williamr@2: IMPORT_C void operator=(TVTzActualisedRule aRule); williamr@2: static TInt Order(const TVTzActualisedRule& aLeft, const TVTzActualisedRule& aRight); williamr@2: williamr@2: public: williamr@2: TTime iTimeOfChange; williamr@2: TInt32 iNewOffset; williamr@2: TTzTimeReference iTimeReference; williamr@2: }; williamr@2: williamr@2: williamr@2: /** williamr@2: Encapsulates a collection of the local time changes occurring during a range of years. williamr@2: williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: NONSHARABLE_CLASS(CVTzActualisedRules) : public CBase williamr@2: { williamr@2: public: williamr@2: IMPORT_C static CVTzActualisedRules* NewL(TInt aStartYear, TInt aEndYear); williamr@2: IMPORT_C ~CVTzActualisedRules(); williamr@2: IMPORT_C void AddRuleL(const TVTzActualisedRule& aRule); williamr@2: IMPORT_C TInt Count() const; williamr@2: IMPORT_C TVTzActualisedRule& operator[](TInt aIndex) const; williamr@2: williamr@2: IMPORT_C TInt StartYear() const; williamr@2: IMPORT_C TInt EndYear() const; williamr@2: williamr@2: IMPORT_C TBool IsDaylightSavingOn(TTime& aTime) const; williamr@2: IMPORT_C TInt GetOffsetFromRuleL(const TTime& aTime, TTzTimeReference aTimeRef) const; williamr@2: williamr@2: private: williamr@2: CVTzActualisedRules(TInt aStartYear, TInt aEndYear); williamr@2: CVTzActualisedRules(); williamr@2: TInt CompareTimesWithRef(TTime aRolloverTime, TTzTimeReference aTimeRefRollover, williamr@2: TTime aUserTime, TTzTimeReference aTimeRefUser, williamr@2: TInt aOldWallOffset, TTimeIntervalMinutes& aDiffMinutes) const; williamr@2: williamr@2: private: williamr@2: TInt32 iStartYear; // years covered by williamr@2: TInt32 iEndYear; // the actualised rules williamr@2: RArray iRules; williamr@2: }; williamr@2: williamr@2: #endif