ICU 76.1  76.1
timezone.h
Go to the documentation of this file.
1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*************************************************************************
4 * Copyright (c) 1997-2016, International Business Machines Corporation
5 * and others. All Rights Reserved.
6 **************************************************************************
7 *
8 * File TIMEZONE.H
9 *
10 * Modification History:
11 *
12 * Date Name Description
13 * 04/21/97 aliu Overhauled header.
14 * 07/09/97 helena Changed createInstance to createDefault.
15 * 08/06/97 aliu Removed dependency on internal header for Hashtable.
16 * 08/10/98 stephen Changed getDisplayName() API conventions to match
17 * 08/19/98 stephen Changed createTimeZone() to never return 0
18 * 09/02/98 stephen Sync to JDK 1.2 8/31
19 * - Added getOffset(... monthlen ...)
20 * - Added hasSameRules()
21 * 09/15/98 stephen Added getStaticClassID
22 * 12/03/99 aliu Moved data out of static table into icudata.dll.
23 * Hashtable replaced by new static data structures.
24 * 12/14/99 aliu Made GMT public.
25 * 08/15/01 grhoten Made GMT private and added the getGMT() function
26 **************************************************************************
27 */
28 
29 #ifndef TIMEZONE_H
30 #define TIMEZONE_H
31 
32 #include "unicode/utypes.h"
33 
34 #if U_SHOW_CPLUSPLUS_API
35 
41 #if !UCONFIG_NO_FORMATTING
42 
43 #include "unicode/uobject.h"
44 #include "unicode/unistr.h"
45 #include "unicode/ures.h"
46 #include "unicode/ucal.h"
47 
48 U_NAMESPACE_BEGIN
49 
50 class StringEnumeration;
51 
133 class U_I18N_API TimeZone : public UObject {
134 public:
138  virtual ~TimeZone();
139 
152  static const TimeZone& U_EXPORT2 getUnknown();
153 
166  static const TimeZone* U_EXPORT2 getGMT();
167 
179  static TimeZone* U_EXPORT2 createTimeZone(const UnicodeString& ID);
180 
196  static StringEnumeration* U_EXPORT2 createTimeZoneIDEnumeration(
197  USystemTimeZoneType zoneType,
198  const char* region,
199  const int32_t* rawOffset,
200  UErrorCode& ec);
201 
202 #ifndef U_HIDE_DEPRECATED_API
203 
210  static StringEnumeration* U_EXPORT2 createEnumeration();
211 #endif // U_HIDE_DEPRECATED_API
212 
221  static StringEnumeration* U_EXPORT2 createEnumeration(UErrorCode& status);
222 
223 #ifndef U_HIDE_DEPRECATED_API
224 
241  static StringEnumeration* U_EXPORT2 createEnumeration(int32_t rawOffset);
242 #endif // U_HIDE_DEPRECATED_API
243 
262  static StringEnumeration* U_EXPORT2 createEnumerationForRawOffset(int32_t rawOffset, UErrorCode& status);
263 
264 #ifndef U_HIDE_DEPRECATED_API
265 
275  static StringEnumeration* U_EXPORT2 createEnumeration(const char* region);
276 #endif // U_HIDE_DEPRECATED_API
277 
289  static StringEnumeration* U_EXPORT2 createEnumerationForRegion(const char* region, UErrorCode& status);
290 
305  static int32_t U_EXPORT2 countEquivalentIDs(const UnicodeString& id);
306 
326  static const UnicodeString U_EXPORT2 getEquivalentID(const UnicodeString& id,
327  int32_t index);
328 
352  static TimeZone* U_EXPORT2 detectHostTimeZone();
353 
367  static TimeZone* U_EXPORT2 createDefault();
368 
369 #ifndef U_HIDE_INTERNAL_API
370 
379  static TimeZone* U_EXPORT2 forLocaleOrDefault(const Locale& locale);
380 #endif /* U_HIDE_INTERNAL_API */
381 
391  static void U_EXPORT2 adoptDefault(TimeZone* zone);
392 
393 #ifndef U_HIDE_SYSTEM_API
394 
402  static void U_EXPORT2 setDefault(const TimeZone& zone);
403 #endif /* U_HIDE_SYSTEM_API */
404 
411  static const char* U_EXPORT2 getTZDataVersion(UErrorCode& status);
412 
426  static UnicodeString& U_EXPORT2 getCanonicalID(const UnicodeString& id,
427  UnicodeString& canonicalID, UErrorCode& status);
428 
444  static UnicodeString& U_EXPORT2 getCanonicalID(const UnicodeString& id,
445  UnicodeString& canonicalID, UBool& isSystemID, UErrorCode& status);
446 
447 
473  static UnicodeString& U_EXPORT2 getIanaID(const UnicodeString&id, UnicodeString& ianaID,
474  UErrorCode& status);
475 
498  static UnicodeString& U_EXPORT2 getWindowsID(const UnicodeString& id,
499  UnicodeString& winid, UErrorCode& status);
500 
527  static UnicodeString& U_EXPORT2 getIDForWindowsID(const UnicodeString& winid, const char* region,
528  UnicodeString& id, UErrorCode& status);
529 
539  virtual bool operator==(const TimeZone& that) const;
540 
550  bool operator!=(const TimeZone& that) const {return !operator==(that);}
551 
576  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
577  uint8_t dayOfWeek, int32_t millis, UErrorCode& status) const = 0;
578 
599  virtual int32_t getOffset(uint8_t era, int32_t year, int32_t month, int32_t day,
600  uint8_t dayOfWeek, int32_t milliseconds,
601  int32_t monthLength, UErrorCode& status) const = 0;
602 
626  virtual void getOffset(UDate date, UBool local, int32_t& rawOffset,
627  int32_t& dstOffset, UErrorCode& ec) const;
628 
636  virtual void setRawOffset(int32_t offsetMillis) = 0;
637 
645  virtual int32_t getRawOffset() const = 0;
646 
654  UnicodeString& getID(UnicodeString& ID) const;
655 
669  void setID(const UnicodeString& ID);
670 
680  SHORT = 1,
719  GENERIC_LOCATION
720  };
721 
733  UnicodeString& getDisplayName(UnicodeString& result) const;
734 
748  UnicodeString& getDisplayName(const Locale& locale, UnicodeString& result) const;
749 
762  UnicodeString& getDisplayName(UBool inDaylight, EDisplayType style, UnicodeString& result) const;
763 
778  UnicodeString& getDisplayName(UBool inDaylight, EDisplayType style, const Locale& locale, UnicodeString& result) const;
779 
814  virtual UBool useDaylightTime() const = 0;
815 
816 #ifndef U_FORCE_HIDE_DEPRECATED_API
817 
830  virtual UBool inDaylightTime(UDate date, UErrorCode& status) const = 0;
831 #endif // U_FORCE_HIDE_DEPRECATED_API
832 
841  virtual UBool hasSameRules(const TimeZone& other) const;
842 
850  virtual TimeZone* clone() const = 0;
851 
858  static UClassID U_EXPORT2 getStaticClassID();
859 
871  virtual UClassID getDynamicClassID() const override = 0;
872 
888  virtual int32_t getDSTSavings() const;
889 
907  static int32_t U_EXPORT2 getRegion(const UnicodeString& id,
908  char *region, int32_t capacity, UErrorCode& status);
909 
910 protected:
911 
916  TimeZone();
917 
923  TimeZone(const UnicodeString &id);
924 
930  TimeZone(const TimeZone& source);
931 
937  TimeZone& operator=(const TimeZone& right);
938 
939 #ifndef U_HIDE_INTERNAL_API
940 
949  static UResourceBundle* loadRule(const UResourceBundle* top, const UnicodeString& ruleid, UResourceBundle* oldbundle, UErrorCode&status);
950 #endif /* U_HIDE_INTERNAL_API */
951 
952 private:
953  friend class ZoneMeta;
954 
955 
956  static TimeZone* createCustomTimeZone(const UnicodeString&); // Creates a time zone based on the string.
957 
966  static const char16_t* findID(const UnicodeString& id);
967 
976  static const char16_t* dereferOlsonLink(const UnicodeString& id);
977 
984  static const char16_t* getRegion(const UnicodeString& id);
985 
986  public:
987 #ifndef U_HIDE_INTERNAL_API
988 
996  static const char16_t* getRegion(const UnicodeString& id, UErrorCode& status);
997 #endif /* U_HIDE_INTERNAL_API */
998 
999  private:
1010  static UBool parseCustomID(const UnicodeString& id, int32_t& sign, int32_t& hour,
1011  int32_t& minute, int32_t& second);
1012 
1023  static UnicodeString& getCustomID(const UnicodeString& id, UnicodeString& normalized,
1024  UErrorCode& status);
1025 
1035  static UnicodeString& formatCustomID(int32_t hour, int32_t min, int32_t sec,
1036  UBool negative, UnicodeString& id);
1037 
1038  UnicodeString fID; // this time zone's ID
1039 
1040  friend class TZEnumeration;
1041 };
1042 
1043 
1044 // -------------------------------------
1045 
1046 inline UnicodeString&
1047 TimeZone::getID(UnicodeString& ID) const
1048 {
1049  ID = fID;
1050  return ID;
1051 }
1052 
1053 // -------------------------------------
1054 
1055 inline void
1056 TimeZone::setID(const UnicodeString& ID)
1057 {
1058  fID = ID;
1059 }
1060 U_NAMESPACE_END
1061 
1062 #endif /* #if !UCONFIG_NO_FORMATTING */
1063 
1064 #endif /* U_SHOW_CPLUSPLUS_API */
1065 
1066 #endif //_TIMEZONE
1067 //eof
C API: Calendar.
bool operator!=(const TimeZone &that) const
Returns true if the two TimeZones are NOT equal; that is, if operator==() returns false...
Definition: timezone.h:550
double UDate
Date and Time data type.
Definition: utypes.h:218
C++ API: Unicode String.
U_EXPORT UBool operator==(const StringPiece &x, const StringPiece &y)
Global operator == for StringPiece.
void * UClassID
UClassID is used to identify classes without using the compiler's RTTI.
Definition: uobject.h:96
Base class for 'pure' C++ implementations of uenum api.
Definition: strenum.h:61
EDisplayType
Enum for use with getDisplayName.
Definition: timezone.h:675
TimeZone represents a time zone offset, and also figures out daylight savings.
Definition: timezone.h:133
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside...
Definition: utypes.h:316
Selector for short display name derived from time zone offset.
Definition: timezone.h:701
virtual UClassID getDynamicClassID() const
ICU4C "poor man's RTTI", returns a UClassID for the actual ICU class.
Selector for short generic display name.
Definition: timezone.h:690
Selector for long generic display name.
Definition: timezone.h:695
Selector for long display name.
Definition: timezone.h:685
C++ API: Common ICU base class UObject.
Selector for short display name derived from the time zone's fallback name.
Definition: timezone.h:713
USystemTimeZoneType
System time zone type constants used by filtering zones in ucal_openTimeZoneIDEnumeration.
Definition: ucal.h:579
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:430
Basic definitions for ICU, for both C and C++ APIs.
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:295
struct UResourceBundle UResourceBundle
Definition: ures.h:63
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:223
Selector for long display name derived from time zone offset.
Definition: timezone.h:707
C API: Resource Bundle.
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:247
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:195