ICU 55.1  55.1
timezone.h
Go to the documentation of this file.
1 /*************************************************************************
2 * Copyright (c) 1997-2015, International Business Machines Corporation
3 * and others. All Rights Reserved.
4 **************************************************************************
5 *
6 * File TIMEZONE.H
7 *
8 * Modification History:
9 *
10 * Date Name Description
11 * 04/21/97 aliu Overhauled header.
12 * 07/09/97 helena Changed createInstance to createDefault.
13 * 08/06/97 aliu Removed dependency on internal header for Hashtable.
14 * 08/10/98 stephen Changed getDisplayName() API conventions to match
15 * 08/19/98 stephen Changed createTimeZone() to never return 0
16 * 09/02/98 stephen Sync to JDK 1.2 8/31
17 * - Added getOffset(... monthlen ...)
18 * - Added hasSameRules()
19 * 09/15/98 stephen Added getStaticClassID
20 * 12/03/99 aliu Moved data out of static table into icudata.dll.
21 * Hashtable replaced by new static data structures.
22 * 12/14/99 aliu Made GMT public.
23 * 08/15/01 grhoten Made GMT private and added the getGMT() function
24 **************************************************************************
25 */
26 
27 #ifndef TIMEZONE_H
28 #define TIMEZONE_H
29 
30 #include "unicode/utypes.h"
31 
37 #if !UCONFIG_NO_FORMATTING
38 
39 #include "unicode/uobject.h"
40 #include "unicode/unistr.h"
41 #include "unicode/ures.h"
42 #include "unicode/ucal.h"
43 
45 
46 class StringEnumeration;
47 
129 class U_I18N_API TimeZone : public UObject {
130 public:
134  virtual ~TimeZone();
135 
148  static const TimeZone& U_EXPORT2 getUnknown();
149 
162  static const TimeZone* U_EXPORT2 getGMT(void);
163 
175  static TimeZone* U_EXPORT2 createTimeZone(const UnicodeString& ID);
176 
193  USystemTimeZoneType zoneType,
194  const char* region,
195  const int32_t* rawOffset,
196  UErrorCode& ec);
197 
206 
224  static StringEnumeration* U_EXPORT2 createEnumeration(int32_t rawOffset);
225 
236  static StringEnumeration* U_EXPORT2 createEnumeration(const char* country);
237 
252  static int32_t U_EXPORT2 countEquivalentIDs(const UnicodeString& id);
253 
273  static const UnicodeString U_EXPORT2 getEquivalentID(const UnicodeString& id,
274  int32_t index);
275 
276 #ifndef U_HIDE_DRAFT_API
277 
290  static TimeZone* U_EXPORT2 detectHostTimeZone();
291 #endif
292 
305  static TimeZone* U_EXPORT2 createDefault(void);
306 
320  static void U_EXPORT2 adoptDefault(TimeZone* zone);
321 
322 #ifndef U_HIDE_SYSTEM_API
323 
333  static void U_EXPORT2 setDefault(const TimeZone& zone);
334 #endif /* U_HIDE_SYSTEM_API */
335 
342  static const char* U_EXPORT2 getTZDataVersion(UErrorCode& status);
343 
357  static UnicodeString& U_EXPORT2 getCanonicalID(const UnicodeString& id,
358  UnicodeString& canonicalID, UErrorCode& status);
359 
375  static UnicodeString& U_EXPORT2 getCanonicalID(const UnicodeString& id,
376  UnicodeString& canonicalID, UBool& isSystemID, UErrorCode& status);
377 
400  static UnicodeString& U_EXPORT2 getWindowsID(const UnicodeString& id,
401  UnicodeString& winid, UErrorCode& status);
402 
429  static UnicodeString& U_EXPORT2 getIDForWindowsID(const UnicodeString& winid, const char* region,
430  UnicodeString& id, UErrorCode& status);
431 
441  virtual UBool operator==(const TimeZone& that) const;
442 
452  UBool operator!=(const TimeZone& that) const {return !operator==(that);}
453 
478  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
479  uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const = 0;
480 
501  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
502  uint8_t dayOfWeek, int32_t milliseconds,
503  int32_t monthLength, UErrorCode& status) const = 0;
504 
528  virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
529  int32_t& dstOffset, UErrorCode& ec) const;
530 
538  virtual void setRawOffset(int32_t offsetMillis) = 0;
539 
547  virtual int32_t getRawOffset(void) const = 0;
548 
556  UnicodeString& getID(UnicodeString& ID) const;
557 
571  void setID(const UnicodeString& ID);
572 
582  SHORT = 1,
621  GENERIC_LOCATION
622  };
623 
636 
650  UnicodeString& getDisplayName(const Locale& locale, UnicodeString& result) const;
651 
664  UnicodeString& getDisplayName(UBool daylight, EDisplayType style, UnicodeString& result) const;
665 
680  UnicodeString& getDisplayName(UBool daylight, EDisplayType style, const Locale& locale, UnicodeString& result) const;
681 
716  virtual UBool useDaylightTime(void) const = 0;
717 
731  virtual UBool inDaylightTime(UDate date, UErrorCode& status) const = 0;
732 
741  virtual UBool hasSameRules(const TimeZone& other) const;
742 
750  virtual TimeZone* clone(void) const = 0;
751 
758  static UClassID U_EXPORT2 getStaticClassID(void);
759 
771  virtual UClassID getDynamicClassID(void) const = 0;
772 
788  virtual int32_t getDSTSavings() const;
789 
807  static int32_t U_EXPORT2 getRegion(const UnicodeString& id,
808  char *region, int32_t capacity, UErrorCode& status);
809 
810 protected:
811 
817 
824 
830  TimeZone(const TimeZone& source);
831 
837  TimeZone& operator=(const TimeZone& right);
838 
839 #ifndef U_HIDE_INTERNAL_API
840 
849  static UResourceBundle* loadRule(const UResourceBundle* top, const UnicodeString& ruleid, UResourceBundle* oldbundle, UErrorCode&status);
850 #endif /* U_HIDE_INTERNAL_API */
851 
852 private:
853  friend class ZoneMeta;
854 
855 
856  static TimeZone* createCustomTimeZone(const UnicodeString&); // Creates a time zone based on the string.
857 
866  static const UChar* findID(const UnicodeString& id);
867 
876  static const UChar* dereferOlsonLink(const UnicodeString& id);
877 
884  static const UChar* getRegion(const UnicodeString& id);
885 
886  public:
887 #ifndef U_HIDE_INTERNAL_API
888 
896  static const UChar* getRegion(const UnicodeString& id, UErrorCode& status);
897 #endif /* U_HIDE_INTERNAL_API */
898 
899  private:
910  static UBool parseCustomID(const UnicodeString& id, int32_t& sign, int32_t& hour,
911  int32_t& minute, int32_t& second);
912 
923  static UnicodeString& getCustomID(const UnicodeString& id, UnicodeString& normalized,
924  UErrorCode& status);
925 
935  static UnicodeString& formatCustomID(int32_t hour, int32_t min, int32_t sec,
936  UBool negative, UnicodeString& id);
937 
938  UnicodeString fID; // this time zone's ID
939 
940  friend class TZEnumeration;
941 };
942 
943 
944 // -------------------------------------
945 
946 inline UnicodeString&
947 TimeZone::getID(UnicodeString& ID) const
948 {
949  ID = fID;
950  return ID;
951 }
952 
953 // -------------------------------------
954 
955 inline void
956 TimeZone::setID(const UnicodeString& ID)
957 {
958  fID = ID;
959 }
961 
962 #endif /* #if !UCONFIG_NO_FORMATTING */
963 
964 #endif //_TIMEZONE
965 //eof
icu::TimeZone::SHORT_COMMONLY_USED
@ SHORT_COMMONLY_USED
Selector for short display name derived from the time zone's fallback name.
Definition: timezone.h:615
icu::TimeZone::detectHostTimeZone
static TimeZone * detectHostTimeZone()
Creates an instance of TimeZone detected from the current host system configuration.
icu::TimeZone::TimeZone
TimeZone(const UnicodeString &id)
Construct a TimeZone with a given ID.
icu::TimeZone::getDSTSavings
virtual int32_t getDSTSavings() const
Returns the amount of time to be added to local standard time to get local wall clock time.
icu::TimeZone::~TimeZone
virtual ~TimeZone()
utypes.h
Basic definitions for ICU, for both C and C++ APIs.
icu::TimeZone::getCanonicalID
static UnicodeString & getCanonicalID(const UnicodeString &id, UnicodeString &canonicalID, UBool &isSystemID, UErrorCode &status)
Returns the canonical system time zone ID or the normalized custom time zone ID for the given time zo...
icu::TimeZone::getOffset
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t milliseconds, int32_t monthLength, UErrorCode &status) const =0
Gets the time zone offset, for current date, modified in case of daylight savings.
icu::TimeZone::inDaylightTime
virtual UBool inDaylightTime(UDate date, UErrorCode &status) const =0
Queries if the given date is in daylight savings time in this time zone.
icu::TimeZone::getDisplayName
UnicodeString & getDisplayName(const Locale &locale, UnicodeString &result) const
Returns a name of this time zone suitable for presentation to the user in the specified locale.
U_I18N_API
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition: utypes.h:358
icu::TimeZone::setRawOffset
virtual void setRawOffset(int32_t offsetMillis)=0
Sets the TimeZone's raw GMT offset (i.e., the number of milliseconds to add to GMT to get local time,...
UBool
int8_t UBool
The ICU boolean type.
Definition: umachine.h:234
icu::TimeZone::SHORT_GENERIC
@ SHORT_GENERIC
Selector for short generic display name.
Definition: timezone.h:592
icu::TimeZone::operator==
virtual UBool operator==(const TimeZone &that) const
Returns true if the two TimeZones are equal.
UResourceBundle
struct UResourceBundle UResourceBundle
Definition: ures.h:57
icu::TimeZone::loadRule
static UResourceBundle * loadRule(const UResourceBundle *top, const UnicodeString &ruleid, UResourceBundle *oldbundle, UErrorCode &status)
Utility function.
icu::operator==
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
icu::TimeZone::EDisplayType
EDisplayType
Enum for use with getDisplayName.
Definition: timezone.h:577
icu::TimeZone
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:129
icu::TimeZone::TimeZone
TimeZone()
Default constructor.
icu::TimeZone::getStaticClassID
static UClassID getStaticClassID(void)
Return the class ID for this class.
icu::TimeZone::setDefault
static void setDefault(const TimeZone &zone)
Same as adoptDefault(), except that the TimeZone object passed in is NOT adopted; the caller remains ...
icu::TimeZone::TimeZone
TimeZone(const TimeZone &source)
Copy constructor.
icu::TimeZone::getOffset
virtual void getOffset(UDate date, UBool local, int32_t &rawOffset, int32_t &dstOffset, UErrorCode &ec) const
Returns the time zone raw and GMT offset for the given moment in time.
icu::TimeZone::createTimeZoneIDEnumeration
static StringEnumeration * createTimeZoneIDEnumeration(USystemTimeZoneType zoneType, const char *region, const int32_t *rawOffset, UErrorCode &ec)
Returns an enumeration over system time zone IDs with the given filter conditions.
icu::TimeZone::getCanonicalID
static UnicodeString & getCanonicalID(const UnicodeString &id, UnicodeString &canonicalID, UErrorCode &status)
Returns the canonical system timezone ID or the normalized custom time zone ID for the given time zon...
icu::TimeZone::adoptDefault
static void adoptDefault(TimeZone *zone)
Sets the default time zone (i.e., what's returned by createDefault()) to be the specified time zone.
ures.h
C API: Resource Bundle.
icu::TimeZone::getUnknown
static const TimeZone & getUnknown()
Returns the "unknown" time zone.
icu::UnicodeString
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:246
icu::TimeZone::createDefault
static TimeZone * createDefault(void)
Creates a new copy of the default TimeZone for this host.
icu::UObject
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:221
icu::TimeZone::getEquivalentID
static const UnicodeString getEquivalentID(const UnicodeString &id, int32_t index)
Returns an ID in the equivalency group that includes the given ID.
UClassID
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:91
UErrorCode
UErrorCode
Error code to replace exception handling, so that the code is compatible with all C++ compilers,...
Definition: utypes.h:476
icu::StringEnumeration
Base class for 'pure' C++ implementations of uenum api.
Definition: strenum.h:55
icu::TimeZone::getTZDataVersion
static const char * getTZDataVersion(UErrorCode &status)
Returns the timezone data version currently used by ICU.
icu::TimeZone::getRegion
static int32_t getRegion(const UnicodeString &id, char *region, int32_t capacity, UErrorCode &status)
Gets the region code associated with the given system time zone ID.
ucal.h
C API: Calendar.
icu::TimeZone::getOffset
virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day, uint8_t dayOfWeek, int32_t millis, UErrorCode &status) const =0
Returns the TimeZone's adjusted GMT offset (i.e., the number of milliseconds to add to GMT to get loc...
icu::TimeZone::countEquivalentIDs
static int32_t countEquivalentIDs(const UnicodeString &id)
Returns the number of IDs in the equivalency group that includes the given ID.
icu::TimeZone::getGMT
static const TimeZone * getGMT(void)
The GMT (=UTC) time zone has a raw offset of zero and does not use daylight savings time.
icu::TimeZone::getWindowsID
static UnicodeString & getWindowsID(const UnicodeString &id, UnicodeString &winid, UErrorCode &status)
Converts a system time zone ID to an equivalent Windows time zone ID.
icu::TimeZone::getRegion
static const UChar * getRegion(const UnicodeString &id, UErrorCode &status)
Returns the region code associated with the given zone, or NULL if the zone is not known.
icu::TimeZone::createTimeZone
static TimeZone * createTimeZone(const UnicodeString &ID)
Creates a TimeZone for the given ID.
icu::TimeZone::getDynamicClassID
virtual UClassID getDynamicClassID(void) const =0
Returns a unique class ID POLYMORPHICALLY.
icu::TimeZone::createEnumeration
static StringEnumeration * createEnumeration(int32_t rawOffset)
Returns an enumeration over time zone IDs with a given raw offset from GMT.
icu::TimeZone::operator=
TimeZone & operator=(const TimeZone &right)
Default assignment operator.
icu::TimeZone::createEnumeration
static StringEnumeration * createEnumeration(const char *country)
Returns an enumeration over time zone IDs associated with the given country.
icu::TimeZone::createEnumeration
static StringEnumeration * createEnumeration()
Returns an enumeration over all recognized time zone IDs.
icu::TimeZone::getIDForWindowsID
static UnicodeString & getIDForWindowsID(const UnicodeString &winid, const char *region, UnicodeString &id, UErrorCode &status)
Converts a Windows time zone ID to an equivalent system time zone ID for a region.
UDate
double UDate
Date and Time data type.
Definition: utypes.h:201
icu::TimeZone::LONG_GMT
@ LONG_GMT
Selector for long display name derived from time zone offset.
Definition: timezone.h:609
icu::TimeZone::getDisplayName
UnicodeString & getDisplayName(UBool daylight, EDisplayType style, UnicodeString &result) const
Returns a name of this time zone suitable for presentation to the user in the default locale.
icu::TimeZone::SHORT_GMT
@ SHORT_GMT
Selector for short display name derived from time zone offset.
Definition: timezone.h:603
icu::TimeZone::clone
virtual TimeZone * clone(void) const =0
Clones TimeZone objects polymorphically.
icu::TimeZone::useDaylightTime
virtual UBool useDaylightTime(void) const =0
Queries if this time zone uses daylight savings time.
icu::TimeZone::getDisplayName
UnicodeString & getDisplayName(UnicodeString &result) const
Returns a name of this time zone suitable for presentation to the user in the default locale.
icu::TimeZone::LONG_GENERIC
@ LONG_GENERIC
Selector for long generic display name.
Definition: timezone.h:597
UChar
uint16_t UChar
Define UChar to be UCHAR_TYPE, if that is #defined (for example, to char16_t), or wchar_t if that is ...
Definition: umachine.h:312
icu::TimeZone::hasSameRules
virtual UBool hasSameRules(const TimeZone &other) const
Returns true if this zone has the same rule and offset as another zone.
uobject.h
C++ API: Common ICU base class UObject.
icu::TimeZone::LONG
@ LONG
Selector for long display name.
Definition: timezone.h:587
U_NAMESPACE_END
#define U_NAMESPACE_END
This is used to end a declaration of a public ICU C++ API.
Definition: uversion.h:130
U_NAMESPACE_BEGIN
#define U_NAMESPACE_BEGIN
This is used to begin a declaration of a public ICU C++ API.
Definition: uversion.h:129
USystemTimeZoneType
USystemTimeZoneType
System time zone type constants used by filtering zones in ucal_openTimeZoneIDEnumeration.
Definition: ucal.h:530
icu::TimeZone::operator!=
UBool operator!=(const TimeZone &that) const
Returns true if the two TimeZones are NOT equal; that is, if operator==() returns false.
Definition: timezone.h:452
icu::Locale
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:185
icu::TimeZone::getDisplayName
UnicodeString & getDisplayName(UBool daylight, EDisplayType style, const Locale &locale, UnicodeString &result) const
Returns a name of this time zone suitable for presentation to the user in the specified locale.
unistr.h
C++ API: Unicode String.
icu::TimeZone::getRawOffset
virtual int32_t getRawOffset(void) const =0
Returns the TimeZone's raw GMT offset (i.e., the number of milliseconds to add to GMT to get local ti...