• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 *******************************************************************************
3 * Copyright (C) 2003 - 2008, International Business Machines Corporation and  *
4 * others. All Rights Reserved.                                                *
5 *******************************************************************************
6 */
7 
8 #ifndef CECAL_H
9 #define CECAL_H
10 
11 #include "unicode/utypes.h"
12 
13 #if !UCONFIG_NO_FORMATTING
14 
15 #include "unicode/calendar.h"
16 
17 U_NAMESPACE_BEGIN
18 
19 /**
20  * Base class for EthiopicCalendar and CopticCalendar.
21  * @internal
22  */
23 class U_I18N_API CECalendar : public Calendar {
24 
25 protected:
26     //-------------------------------------------------------------------------
27     // Constructors...
28     //-------------------------------------------------------------------------
29 
30     /**
31      * Constructs a CECalendar based on the current time in the default time zone
32      * with the given locale with the Julian epoch offiset
33      *
34      * @param aLocale  The given locale.
35      * @param success  Indicates the status of CECalendar object construction.
36      *                 Returns U_ZERO_ERROR if constructed successfully.
37      * @internal
38      */
39     CECalendar(const Locale& aLocale, UErrorCode& success);
40 
41     /**
42      * Copy Constructor
43      * @internal
44      */
45     CECalendar (const CECalendar& other);
46 
47     /**
48      * Destructor.
49      * @internal
50      */
51     virtual ~CECalendar();
52 
53     /**
54      * Default assignment operator
55      * @param right    Calendar object to be copied
56      * @internal
57      */
58     CECalendar& operator=(const CECalendar& right);
59 
60 protected:
61     //-------------------------------------------------------------------------
62     // Calendar framework
63     //-------------------------------------------------------------------------
64 
65     /**
66      * Return JD of start of given month/extended year
67      * @internal
68      */
69     virtual int32_t handleComputeMonthStart(int32_t eyear, int32_t month, UBool useMonth) const;
70 
71     /**
72      * Calculate the limit for a specified type of limit and field
73      * @internal
74      */
75     virtual int32_t handleGetLimit(UCalendarDateFields field, ELimitType limitType) const;
76 
77     /**
78      * (Overrides Calendar) Return true if the current date for this Calendar is in
79      * Daylight Savings Time. Recognizes DST_OFFSET, if it is set.
80      *
81      * @param status Fill-in parameter which receives the status of this operation.
82      * @return   True if the current date for this Calendar is in Daylight Savings Time,
83      *           false, otherwise.
84      * @internal
85      */
86     virtual UBool inDaylightTime(UErrorCode&) const;
87 
88     /**
89      * Returns TRUE because Coptic/Ethiopic Calendar does have a default century
90      * @internal
91      */
92     virtual UBool haveDefaultCentury() const;
93 
94 protected:
95     /**
96      * The Coptic and Ethiopic calendars differ only in their epochs.
97      * This method must be implemented by CECalendar subclasses to
98      * return the date offset from Julian
99      * @internal
100      */
101     virtual int32_t getJDEpochOffset() const = 0;
102 
103     /**
104      * Convert an Coptic/Ethiopic year, month, and day to a Julian day.
105      *
106      * @param year the extended year
107      * @param month the month
108      * @param day the day
109      * @param jdEpochOffset the epoch offset from Julian epoch
110      * @return Julian day
111      * @internal
112      */
113     static int32_t ceToJD(int32_t year, int32_t month, int32_t date,
114         int32_t jdEpochOffset);
115 
116     /**
117      * Convert a Julian day to an Coptic/Ethiopic year, month and day
118      *
119      * @param julianDay the Julian day
120      * @param jdEpochOffset the epoch offset from Julian epoch
121      * @param year receives the extended year
122      * @param month receives the month
123      * @param date receives the day
124      * @internal
125      */
126     static void jdToCE(int32_t julianDay, int32_t jdEpochOffset,
127         int32_t& year, int32_t& month, int32_t& day);
128 };
129 
130 U_NAMESPACE_END
131 
132 #endif /* #if !UCONFIG_NO_FORMATTING */
133 #endif
134 //eof
135