ICU 49.1.1  49.1.1
gregocal.h
Go to the documentation of this file.
1 /*
2 * Copyright (C) 1997-2012, International Business Machines Corporation and others.
3 * All Rights Reserved.
4 ********************************************************************************
5 *
6 * File GREGOCAL.H
7 *
8 * Modification History:
9 *
10 * Date Name Description
11 * 04/22/97 aliu Overhauled header.
12 * 07/28/98 stephen Sync with JDK 1.2
13 * 09/04/98 stephen Re-sync with JDK 8/31 putback
14 * 09/14/98 stephen Changed type of kOneDay, kOneWeek to double.
15 * Fixed bug in roll()
16 * 10/15/99 aliu Fixed j31, incorrect WEEK_OF_YEAR computation.
17 * Added documentation of WEEK_OF_YEAR computation.
18 * 10/15/99 aliu Fixed j32, cannot set date to Feb 29 2000 AD.
19 * {JDK bug 4210209 4209272}
20 * 11/07/2003 srl Update, clean up documentation.
21 ********************************************************************************
22 */
23 
24 #ifndef GREGOCAL_H
25 #define GREGOCAL_H
26 
27 #include "unicode/utypes.h"
28 
29 #if !UCONFIG_NO_FORMATTING
30 
31 #include "unicode/calendar.h"
32 
39 
150 public:
151 
156  enum EEras {
157  BC,
158  AD
159  };
160 
169  GregorianCalendar(UErrorCode& success);
170 
181  GregorianCalendar(TimeZone* zoneToAdopt, UErrorCode& success);
182 
192  GregorianCalendar(const TimeZone& zone, UErrorCode& success);
193 
203  GregorianCalendar(const Locale& aLocale, UErrorCode& success);
204 
216  GregorianCalendar(TimeZone* zoneToAdopt, const Locale& aLocale, UErrorCode& success);
217 
228  GregorianCalendar(const TimeZone& zone, const Locale& aLocale, UErrorCode& success);
229 
242  GregorianCalendar(int32_t year, int32_t month, int32_t date, UErrorCode& success);
243 
258  GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, UErrorCode& success);
259 
275  GregorianCalendar(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t minute, int32_t second, UErrorCode& success);
276 
281  virtual ~GregorianCalendar();
282 
288  GregorianCalendar(const GregorianCalendar& source);
289 
296 
302  virtual Calendar* clone(void) const;
303 
313  void setGregorianChange(UDate date, UErrorCode& success);
314 
323  UDate getGregorianChange(void) const;
324 
340  UBool isLeapYear(int32_t year) const;
341 
349  virtual UBool isEquivalentTo(const Calendar& other) const;
350 
362  virtual void roll(EDateFields field, int32_t amount, UErrorCode& status);
363 
375  virtual void roll(UCalendarDateFields field, int32_t amount, UErrorCode& status);
376 
377 #ifndef U_HIDE_DEPRECATED_API
378 
385  int32_t getActualMinimum(EDateFields field) const;
386 
395  int32_t getActualMinimum(EDateFields field, UErrorCode& status) const;
396 #endif /* U_HIDE_DEPRECATED_API */
397 
406  int32_t getActualMinimum(UCalendarDateFields field, UErrorCode &status) const;
407 
408 #ifndef U_HIDE_DEPRECATED_API
409 
418  int32_t getActualMaximum(EDateFields field) const;
419 #endif /* U_HIDE_DEPRECATED_API */
420 
431  virtual int32_t getActualMaximum(UCalendarDateFields field, UErrorCode& status) const;
432 
442  virtual UBool inDaylightTime(UErrorCode& status) const;
443 
444 public:
445 
456  virtual UClassID getDynamicClassID(void) const;
457 
469  static UClassID U_EXPORT2 getStaticClassID(void);
470 
471 /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual */
482  virtual const char * getType() const;
483 
484  private:
485  GregorianCalendar(); // default constructor not implemented
486 
487  protected:
494  virtual int32_t internalGetEra() const;
495 
509  virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month,
510  UBool useMonth) const;
511 
520  virtual int32_t handleComputeJulianDay(UCalendarDateFields bestField) ;
521 
529  virtual int32_t handleGetMonthLength(int32_t extendedYear, int32_t month) const;
530 
538  virtual int32_t handleGetYearLength(int32_t eyear) const;
539 
546  virtual int32_t monthLength(int32_t month) const;
547 
555  virtual int32_t monthLength(int32_t month, int32_t year) const;
556 
557 #ifndef U_HIDE_INTERNAL_API
558 
564  int32_t yearLength(int32_t year) const;
565 
571  int32_t yearLength(void) const;
572 
580  void pinDayOfMonth(void);
581 #endif /* U_HIDE_INTERNAL_API */
582 
590  virtual UDate getEpochDay(UErrorCode& status);
591 
613  virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
614 
623  virtual int32_t handleGetExtendedYear();
624 
633  virtual int32_t handleGetExtendedYearFromWeekFields(int32_t yearWoy, int32_t woy);
634 
635 
651  virtual void handleComputeFields(int32_t julianDay, UErrorCode &status);
652 
653  private:
661  static double computeJulianDayOfYear(UBool isGregorian, int32_t year,
662  UBool& isLeap);
663 
668  UBool validateFields(void) const;
669 
673  UBool boundsCheck(int32_t value, UCalendarDateFields field) const;
674 
684  int32_t aggregateStamp(int32_t stamp_a, int32_t stamp_b);
685 
694  UDate fGregorianCutover;
695 
699  int32_t fCutoverJulianDay;
700 
706  UDate fNormalizedGregorianCutover;// = gregorianCutover;
707 
712  int32_t fGregorianCutoverYear;// = 1582;
713 
718  int32_t fGregorianCutoverJulianDay;// = 2299161;
719 
727  static double millisToJulianDay(UDate millis);
728 
736  static UDate julianDayToMillis(double julian);
737 
742  UBool fIsGregorian;
743 
749  UBool fInvertGregorian;
750 
751 
752  public: // internal implementation
753 
758  virtual UBool haveDefaultCentury() const;
759 
764  virtual UDate defaultCenturyStart() const;
765 
770  virtual int32_t defaultCenturyStartYear() const;
771 
772  private:
779  static UDate fgSystemDefaultCenturyStart;
780 
784  static int32_t fgSystemDefaultCenturyStartYear;
785 
789  static const int32_t fgSystemDefaultCenturyYear;
790 
794  static const UDate fgSystemDefaultCentury;
795 
802  UDate internalGetDefaultCenturyStart(void) const;
803 
810  int32_t internalGetDefaultCenturyStartYear(void) const;
811 
816  static void initializeSystemDefaultCentury(void);
817 
818 };
819 
821 
822 #endif /* #if !UCONFIG_NO_FORMATTING */
823 
824 #endif // _GREGOCAL
825 //eof
826