00001
00002
00003
00004
00005
00006
00007
00008 #ifndef UDAT_H
00009 #define UDAT_H
00010
00011 #include "unicode/utypes.h"
00012
00013 #if !UCONFIG_NO_FORMATTING
00014
00015 #include "unicode/localpointer.h"
00016 #include "unicode/ucal.h"
00017 #include "unicode/unum.h"
00018 #include "unicode/udisplaycontext.h"
00140 typedef void* UDateFormat;
00141
00145 typedef enum UDateFormatStyle {
00147 UDAT_FULL,
00149 UDAT_LONG,
00151 UDAT_MEDIUM,
00153 UDAT_SHORT,
00155 UDAT_DEFAULT = UDAT_MEDIUM,
00156
00158 UDAT_RELATIVE = (1 << 7),
00159
00160 UDAT_FULL_RELATIVE = UDAT_FULL | UDAT_RELATIVE,
00161
00162 UDAT_LONG_RELATIVE = UDAT_LONG | UDAT_RELATIVE,
00163
00164 UDAT_MEDIUM_RELATIVE = UDAT_MEDIUM | UDAT_RELATIVE,
00165
00166 UDAT_SHORT_RELATIVE = UDAT_SHORT | UDAT_RELATIVE,
00167
00168
00170 UDAT_NONE = -1,
00171
00177 UDAT_PATTERN = -2,
00178
00180 UDAT_IGNORE = UDAT_PATTERN
00181 } UDateFormatStyle;
00182
00183
00184
00189 #define UDAT_YEAR "y"
00190
00194 #define UDAT_QUARTER "QQQQ"
00195
00199 #define UDAT_ABBR_QUARTER "QQQ"
00200
00204 #define UDAT_YEAR_QUARTER "yQQQQ"
00205
00209 #define UDAT_YEAR_ABBR_QUARTER "yQQQ"
00210
00214 #define UDAT_MONTH "MMMM"
00215
00219 #define UDAT_ABBR_MONTH "MMM"
00220
00224 #define UDAT_NUM_MONTH "M"
00225
00229 #define UDAT_YEAR_MONTH "yMMMM"
00230
00234 #define UDAT_YEAR_ABBR_MONTH "yMMM"
00235
00239 #define UDAT_YEAR_NUM_MONTH "yM"
00240
00244 #define UDAT_DAY "d"
00245
00250 #define UDAT_YEAR_MONTH_DAY "yMMMMd"
00251
00256 #define UDAT_YEAR_ABBR_MONTH_DAY "yMMMd"
00257
00262 #define UDAT_YEAR_NUM_MONTH_DAY "yMd"
00263
00267 #define UDAT_WEEKDAY "EEEE"
00268
00272 #define UDAT_ABBR_WEEKDAY "E"
00273
00278 #define UDAT_YEAR_MONTH_WEEKDAY_DAY "yMMMMEEEEd"
00279
00284 #define UDAT_YEAR_ABBR_MONTH_WEEKDAY_DAY "yMMMEd"
00285
00290 #define UDAT_YEAR_NUM_MONTH_WEEKDAY_DAY "yMEd"
00291
00296 #define UDAT_MONTH_DAY "MMMMd"
00297
00302 #define UDAT_ABBR_MONTH_DAY "MMMd"
00303
00308 #define UDAT_NUM_MONTH_DAY "Md"
00309
00314 #define UDAT_MONTH_WEEKDAY_DAY "MMMMEEEEd"
00315
00320 #define UDAT_ABBR_MONTH_WEEKDAY_DAY "MMMEd"
00321
00326 #define UDAT_NUM_MONTH_WEEKDAY_DAY "MEd"
00327
00328
00329
00334 #define UDAT_HOUR "j"
00335
00339 #define UDAT_HOUR24 "H"
00340
00344 #define UDAT_MINUTE "m"
00345
00350 #define UDAT_HOUR_MINUTE "jm"
00351
00356 #define UDAT_HOUR24_MINUTE "Hm"
00357
00361 #define UDAT_SECOND "s"
00362
00368 #define UDAT_HOUR_MINUTE_SECOND "jms"
00369
00375 #define UDAT_HOUR24_MINUTE_SECOND "Hms"
00376
00381 #define UDAT_MINUTE_SECOND "ms"
00382
00383
00384
00392 #define UDAT_LOCATION_TZ "VVVV"
00393
00400 #define UDAT_GENERIC_TZ "vvvv"
00401
00408 #define UDAT_ABBR_GENERIC_TZ "v"
00409
00416 #define UDAT_SPECIFIC_TZ "zzzz"
00417
00424 #define UDAT_ABBR_SPECIFIC_TZ "z"
00425
00432 #define UDAT_ABBR_UTC_TZ "ZZZZ"
00433
00434
00435
00440 #define UDAT_STANDALONE_MONTH "LLLL"
00441
00445 #define UDAT_ABBR_STANDALONE_MONTH "LLL"
00446
00451 #define UDAT_HOUR_MINUTE_GENERIC_TZ "jmv"
00452
00456 #define UDAT_HOUR_MINUTE_TZ "jmz"
00457
00461 #define UDAT_HOUR_GENERIC_TZ "jv"
00462
00466 #define UDAT_HOUR_TZ "jz"
00467
00473 typedef enum UDateFormatField {
00479 UDAT_ERA_FIELD = 0,
00480
00486 UDAT_YEAR_FIELD = 1,
00487
00493 UDAT_MONTH_FIELD = 2,
00494
00500 UDAT_DATE_FIELD = 3,
00501
00509 UDAT_HOUR_OF_DAY1_FIELD = 4,
00510
00518 UDAT_HOUR_OF_DAY0_FIELD = 5,
00519
00525 UDAT_MINUTE_FIELD = 6,
00526
00532 UDAT_SECOND_FIELD = 7,
00533
00547 UDAT_FRACTIONAL_SECOND_FIELD = 8,
00548
00554 UDAT_DAY_OF_WEEK_FIELD = 9,
00555
00561 UDAT_DAY_OF_YEAR_FIELD = 10,
00562
00568 UDAT_DAY_OF_WEEK_IN_MONTH_FIELD = 11,
00569
00575 UDAT_WEEK_OF_YEAR_FIELD = 12,
00576
00582 UDAT_WEEK_OF_MONTH_FIELD = 13,
00583
00589 UDAT_AM_PM_FIELD = 14,
00590
00598 UDAT_HOUR1_FIELD = 15,
00599
00607 UDAT_HOUR0_FIELD = 16,
00608
00615 UDAT_TIMEZONE_FIELD = 17,
00616
00622 UDAT_YEAR_WOY_FIELD = 18,
00623
00629 UDAT_DOW_LOCAL_FIELD = 19,
00630
00636 UDAT_EXTENDED_YEAR_FIELD = 20,
00637
00643 UDAT_JULIAN_DAY_FIELD = 21,
00644
00650 UDAT_MILLISECONDS_IN_DAY_FIELD = 22,
00651
00658 UDAT_TIMEZONE_RFC_FIELD = 23,
00659
00665 UDAT_TIMEZONE_GENERIC_FIELD = 24,
00672 UDAT_STANDALONE_DAY_FIELD = 25,
00673
00680 UDAT_STANDALONE_MONTH_FIELD = 26,
00681
00689 UDAT_QUARTER_FIELD = 27,
00690
00698 UDAT_STANDALONE_QUARTER_FIELD = 28,
00699
00705 UDAT_TIMEZONE_SPECIAL_FIELD = 29,
00706
00714 UDAT_YEAR_NAME_FIELD = 30,
00715
00724 UDAT_FIELD_COUNT = 31
00725
00726 } UDateFormatField;
00727
00728
00737 U_STABLE UCalendarDateFields U_EXPORT2
00738 udat_toCalendarDateField(UDateFormatField field);
00739
00740
00769 U_STABLE UDateFormat* U_EXPORT2
00770 udat_open(UDateFormatStyle timeStyle,
00771 UDateFormatStyle dateStyle,
00772 const char *locale,
00773 const UChar *tzID,
00774 int32_t tzIDLength,
00775 const UChar *pattern,
00776 int32_t patternLength,
00777 UErrorCode *status);
00778
00779
00786 U_STABLE void U_EXPORT2
00787 udat_close(UDateFormat* format);
00788
00789 #if U_SHOW_CPLUSPLUS_API
00790
00791 U_NAMESPACE_BEGIN
00792
00802 U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateFormatPointer, UDateFormat, udat_close);
00803
00804 U_NAMESPACE_END
00805
00806 #endif
00807
00816 U_STABLE UDateFormat* U_EXPORT2
00817 udat_clone(const UDateFormat *fmt,
00818 UErrorCode *status);
00819
00838 U_STABLE int32_t U_EXPORT2
00839 udat_format( const UDateFormat* format,
00840 UDate dateToFormat,
00841 UChar* result,
00842 int32_t resultLength,
00843 UFieldPosition* position,
00844 UErrorCode* status);
00845
00871 U_STABLE UDate U_EXPORT2
00872 udat_parse(const UDateFormat* format,
00873 const UChar* text,
00874 int32_t textLength,
00875 int32_t *parsePos,
00876 UErrorCode *status);
00877
00899 U_STABLE void U_EXPORT2
00900 udat_parseCalendar(const UDateFormat* format,
00901 UCalendar* calendar,
00902 const UChar* text,
00903 int32_t textLength,
00904 int32_t *parsePos,
00905 UErrorCode *status);
00906
00916 U_STABLE UBool U_EXPORT2
00917 udat_isLenient(const UDateFormat* fmt);
00918
00928 U_STABLE void U_EXPORT2
00929 udat_setLenient( UDateFormat* fmt,
00930 UBool isLenient);
00931
00941 U_STABLE const UCalendar* U_EXPORT2
00942 udat_getCalendar(const UDateFormat* fmt);
00943
00953 U_STABLE void U_EXPORT2
00954 udat_setCalendar( UDateFormat* fmt,
00955 const UCalendar* calendarToSet);
00956
00966 U_STABLE const UNumberFormat* U_EXPORT2
00967 udat_getNumberFormat(const UDateFormat* fmt);
00968
00978 U_STABLE void U_EXPORT2
00979 udat_setNumberFormat( UDateFormat* fmt,
00980 const UNumberFormat* numberFormatToSet);
00981
00991 U_STABLE const char* U_EXPORT2
00992 udat_getAvailable(int32_t localeIndex);
00993
01002 U_STABLE int32_t U_EXPORT2
01003 udat_countAvailable(void);
01004
01015 U_STABLE UDate U_EXPORT2
01016 udat_get2DigitYearStart( const UDateFormat *fmt,
01017 UErrorCode *status);
01018
01029 U_STABLE void U_EXPORT2
01030 udat_set2DigitYearStart( UDateFormat *fmt,
01031 UDate d,
01032 UErrorCode *status);
01033
01046 U_STABLE int32_t U_EXPORT2
01047 udat_toPattern( const UDateFormat *fmt,
01048 UBool localized,
01049 UChar *result,
01050 int32_t resultLength,
01051 UErrorCode *status);
01052
01063 U_STABLE void U_EXPORT2
01064 udat_applyPattern( UDateFormat *format,
01065 UBool localized,
01066 const UChar *pattern,
01067 int32_t patternLength);
01068
01073 typedef enum UDateFormatSymbolType {
01075 UDAT_ERAS,
01077 UDAT_MONTHS,
01079 UDAT_SHORT_MONTHS,
01081 UDAT_WEEKDAYS,
01083 UDAT_SHORT_WEEKDAYS,
01085 UDAT_AM_PMS,
01087 UDAT_LOCALIZED_CHARS,
01089 UDAT_ERA_NAMES,
01091 UDAT_NARROW_MONTHS,
01093 UDAT_NARROW_WEEKDAYS,
01095 UDAT_STANDALONE_MONTHS,
01096 UDAT_STANDALONE_SHORT_MONTHS,
01097 UDAT_STANDALONE_NARROW_MONTHS,
01099 UDAT_STANDALONE_WEEKDAYS,
01100 UDAT_STANDALONE_SHORT_WEEKDAYS,
01101 UDAT_STANDALONE_NARROW_WEEKDAYS,
01103 UDAT_QUARTERS,
01105 UDAT_SHORT_QUARTERS,
01107 UDAT_STANDALONE_QUARTERS,
01108 UDAT_STANDALONE_SHORT_QUARTERS
01109
01110 } UDateFormatSymbolType;
01111
01112 struct UDateFormatSymbols;
01117 typedef struct UDateFormatSymbols UDateFormatSymbols;
01118
01135 U_STABLE int32_t U_EXPORT2
01136 udat_getSymbols(const UDateFormat *fmt,
01137 UDateFormatSymbolType type,
01138 int32_t symbolIndex,
01139 UChar *result,
01140 int32_t resultLength,
01141 UErrorCode *status);
01142
01155 U_STABLE int32_t U_EXPORT2
01156 udat_countSymbols( const UDateFormat *fmt,
01157 UDateFormatSymbolType type);
01158
01174 U_STABLE void U_EXPORT2
01175 udat_setSymbols( UDateFormat *format,
01176 UDateFormatSymbolType type,
01177 int32_t symbolIndex,
01178 UChar *value,
01179 int32_t valueLength,
01180 UErrorCode *status);
01181
01191 U_STABLE const char* U_EXPORT2
01192 udat_getLocaleByType(const UDateFormat *fmt,
01193 ULocDataLocaleType type,
01194 UErrorCode* status);
01195
01196 #ifndef U_HIDE_INTERNAL_API
01197
01205 U_INTERNAL void U_EXPORT2
01206 udat_setContext(UDateFormat* fmt, UDisplayContext value, UErrorCode* status);
01207
01217 U_INTERNAL UDisplayContext U_EXPORT2
01218 udat_getContext(UDateFormat* fmt, UDisplayContextType type, UErrorCode* status);
01219
01220 #endif
01221
01222 #ifndef U_HIDE_INTERNAL_API
01223
01234 U_INTERNAL int32_t U_EXPORT2
01235 udat_toPatternRelativeDate(const UDateFormat *fmt,
01236 UChar *result,
01237 int32_t resultLength,
01238 UErrorCode *status);
01239
01251 U_INTERNAL int32_t U_EXPORT2
01252 udat_toPatternRelativeTime(const UDateFormat *fmt,
01253 UChar *result,
01254 int32_t resultLength,
01255 UErrorCode *status);
01256
01269 U_INTERNAL void U_EXPORT2
01270 udat_applyPatternRelative(UDateFormat *format,
01271 const UChar *datePattern,
01272 int32_t datePatternLength,
01273 const UChar *timePattern,
01274 int32_t timePatternLength,
01275 UErrorCode *status);
01276 #endif
01277
01282 typedef UDateFormat* (U_EXPORT2 *UDateFormatOpener) (UDateFormatStyle timeStyle,
01283 UDateFormatStyle dateStyle,
01284 const char *locale,
01285 const UChar *tzID,
01286 int32_t tzIDLength,
01287 const UChar *pattern,
01288 int32_t patternLength,
01289 UErrorCode *status);
01290
01295 U_INTERNAL void U_EXPORT2
01296 udat_registerOpener(UDateFormatOpener opener, UErrorCode *status);
01297
01302 U_INTERNAL UDateFormatOpener U_EXPORT2
01303 udat_unregisterOpener(UDateFormatOpener opener, UErrorCode *status);
01304
01305
01306 #endif
01307
01308 #endif