00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef UDAT_H
00011 #define UDAT_H
00012
00013 #include "unicode/utypes.h"
00014
00015 #if !UCONFIG_NO_FORMATTING
00016
00017 #include "unicode/localpointer.h"
00018 #include "unicode/ucal.h"
00019 #include "unicode/unum.h"
00020 #include "unicode/udisplaycontext.h"
00021 #include "unicode/ufieldpositer.h"
00153 typedef void* UDateFormat;
00154
00158 typedef enum UDateFormatStyle {
00160 UDAT_FULL,
00162 UDAT_LONG,
00164 UDAT_MEDIUM,
00166 UDAT_SHORT,
00168 UDAT_DEFAULT = UDAT_MEDIUM,
00169
00171 UDAT_RELATIVE = (1 << 7),
00172
00173 UDAT_FULL_RELATIVE = UDAT_FULL | UDAT_RELATIVE,
00174
00175 UDAT_LONG_RELATIVE = UDAT_LONG | UDAT_RELATIVE,
00176
00177 UDAT_MEDIUM_RELATIVE = UDAT_MEDIUM | UDAT_RELATIVE,
00178
00179 UDAT_SHORT_RELATIVE = UDAT_SHORT | UDAT_RELATIVE,
00180
00181
00183 UDAT_NONE = -1,
00184
00190 UDAT_PATTERN = -2,
00191
00192 #ifndef U_HIDE_INTERNAL_API
00194 UDAT_IGNORE = UDAT_PATTERN
00195 #endif
00196 } UDateFormatStyle;
00197
00198
00199
00204 #define UDAT_YEAR "y"
00205
00209 #define UDAT_QUARTER "QQQQ"
00210
00214 #define UDAT_ABBR_QUARTER "QQQ"
00215
00219 #define UDAT_YEAR_QUARTER "yQQQQ"
00220
00224 #define UDAT_YEAR_ABBR_QUARTER "yQQQ"
00225
00229 #define UDAT_MONTH "MMMM"
00230
00234 #define UDAT_ABBR_MONTH "MMM"
00235
00239 #define UDAT_NUM_MONTH "M"
00240
00244 #define UDAT_YEAR_MONTH "yMMMM"
00245
00249 #define UDAT_YEAR_ABBR_MONTH "yMMM"
00250
00254 #define UDAT_YEAR_NUM_MONTH "yM"
00255
00259 #define UDAT_DAY "d"
00260
00265 #define UDAT_YEAR_MONTH_DAY "yMMMMd"
00266
00271 #define UDAT_YEAR_ABBR_MONTH_DAY "yMMMd"
00272
00277 #define UDAT_YEAR_NUM_MONTH_DAY "yMd"
00278
00282 #define UDAT_WEEKDAY "EEEE"
00283
00287 #define UDAT_ABBR_WEEKDAY "E"
00288
00293 #define UDAT_YEAR_MONTH_WEEKDAY_DAY "yMMMMEEEEd"
00294
00299 #define UDAT_YEAR_ABBR_MONTH_WEEKDAY_DAY "yMMMEd"
00300
00305 #define UDAT_YEAR_NUM_MONTH_WEEKDAY_DAY "yMEd"
00306
00311 #define UDAT_MONTH_DAY "MMMMd"
00312
00317 #define UDAT_ABBR_MONTH_DAY "MMMd"
00318
00323 #define UDAT_NUM_MONTH_DAY "Md"
00324
00329 #define UDAT_MONTH_WEEKDAY_DAY "MMMMEEEEd"
00330
00335 #define UDAT_ABBR_MONTH_WEEKDAY_DAY "MMMEd"
00336
00341 #define UDAT_NUM_MONTH_WEEKDAY_DAY "MEd"
00342
00343
00344
00349 #define UDAT_HOUR "j"
00350
00354 #define UDAT_HOUR24 "H"
00355
00359 #define UDAT_MINUTE "m"
00360
00365 #define UDAT_HOUR_MINUTE "jm"
00366
00371 #define UDAT_HOUR24_MINUTE "Hm"
00372
00376 #define UDAT_SECOND "s"
00377
00383 #define UDAT_HOUR_MINUTE_SECOND "jms"
00384
00390 #define UDAT_HOUR24_MINUTE_SECOND "Hms"
00391
00396 #define UDAT_MINUTE_SECOND "ms"
00397
00398
00399
00407 #define UDAT_LOCATION_TZ "VVVV"
00408
00415 #define UDAT_GENERIC_TZ "vvvv"
00416
00423 #define UDAT_ABBR_GENERIC_TZ "v"
00424
00431 #define UDAT_SPECIFIC_TZ "zzzz"
00432
00439 #define UDAT_ABBR_SPECIFIC_TZ "z"
00440
00447 #define UDAT_ABBR_UTC_TZ "ZZZZ"
00448
00449
00450
00451 #ifndef U_HIDE_DEPRECATED_API
00452
00456 #define UDAT_STANDALONE_MONTH "LLLL"
00457
00461 #define UDAT_ABBR_STANDALONE_MONTH "LLL"
00462
00467 #define UDAT_HOUR_MINUTE_GENERIC_TZ "jmv"
00468
00472 #define UDAT_HOUR_MINUTE_TZ "jmz"
00473
00477 #define UDAT_HOUR_GENERIC_TZ "jv"
00478
00482 #define UDAT_HOUR_TZ "jz"
00483 #endif
00484
00490 typedef enum UDateFormatField {
00496 UDAT_ERA_FIELD = 0,
00497
00503 UDAT_YEAR_FIELD = 1,
00504
00510 UDAT_MONTH_FIELD = 2,
00511
00517 UDAT_DATE_FIELD = 3,
00518
00526 UDAT_HOUR_OF_DAY1_FIELD = 4,
00527
00535 UDAT_HOUR_OF_DAY0_FIELD = 5,
00536
00542 UDAT_MINUTE_FIELD = 6,
00543
00549 UDAT_SECOND_FIELD = 7,
00550
00564 UDAT_FRACTIONAL_SECOND_FIELD = 8,
00565
00571 UDAT_DAY_OF_WEEK_FIELD = 9,
00572
00578 UDAT_DAY_OF_YEAR_FIELD = 10,
00579
00585 UDAT_DAY_OF_WEEK_IN_MONTH_FIELD = 11,
00586
00592 UDAT_WEEK_OF_YEAR_FIELD = 12,
00593
00599 UDAT_WEEK_OF_MONTH_FIELD = 13,
00600
00606 UDAT_AM_PM_FIELD = 14,
00607
00615 UDAT_HOUR1_FIELD = 15,
00616
00624 UDAT_HOUR0_FIELD = 16,
00625
00632 UDAT_TIMEZONE_FIELD = 17,
00633
00639 UDAT_YEAR_WOY_FIELD = 18,
00640
00646 UDAT_DOW_LOCAL_FIELD = 19,
00647
00653 UDAT_EXTENDED_YEAR_FIELD = 20,
00654
00660 UDAT_JULIAN_DAY_FIELD = 21,
00661
00667 UDAT_MILLISECONDS_IN_DAY_FIELD = 22,
00668
00675 UDAT_TIMEZONE_RFC_FIELD = 23,
00676
00682 UDAT_TIMEZONE_GENERIC_FIELD = 24,
00689 UDAT_STANDALONE_DAY_FIELD = 25,
00690
00697 UDAT_STANDALONE_MONTH_FIELD = 26,
00698
00706 UDAT_QUARTER_FIELD = 27,
00707
00715 UDAT_STANDALONE_QUARTER_FIELD = 28,
00716
00722 UDAT_TIMEZONE_SPECIAL_FIELD = 29,
00723
00731 UDAT_YEAR_NAME_FIELD = 30,
00732
00739 UDAT_TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD = 31,
00740
00747 UDAT_TIMEZONE_ISO_FIELD = 32,
00748
00755 UDAT_TIMEZONE_ISO_LOCAL_FIELD = 33,
00756
00757 #ifndef U_HIDE_INTERNAL_API
00758
00763 UDAT_RELATED_YEAR_FIELD = 34,
00764 #endif
00765
00772 UDAT_AM_PM_MIDNIGHT_NOON_FIELD = 35,
00773
00774
00775
00776
00777
00778 UDAT_FLEXIBLE_DAY_PERIOD_FIELD = 36,
00779
00780 #ifndef U_HIDE_INTERNAL_API
00781
00787 UDAT_TIME_SEPARATOR_FIELD = 37,
00788 #endif
00789
00790 #ifndef U_HIDE_DEPRECATED_API
00791
00797 UDAT_FIELD_COUNT = 38
00798 #endif
00799 } UDateFormatField;
00800
00801
00802 #ifndef U_HIDE_INTERNAL_API
00803
00808 #define UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR 0
00809 #endif
00810
00811
00820 U_CAPI UCalendarDateFields U_EXPORT2
00821 udat_toCalendarDateField(UDateFormatField field);
00822
00823
00852 U_CAPI UDateFormat* U_EXPORT2
00853 udat_open(UDateFormatStyle timeStyle,
00854 UDateFormatStyle dateStyle,
00855 const char *locale,
00856 const UChar *tzID,
00857 int32_t tzIDLength,
00858 const UChar *pattern,
00859 int32_t patternLength,
00860 UErrorCode *status);
00861
00862
00869 U_CAPI void U_EXPORT2
00870 udat_close(UDateFormat* format);
00871
00872
00878 typedef enum UDateFormatBooleanAttribute {
00883 UDAT_PARSE_ALLOW_WHITESPACE = 0,
00889 UDAT_PARSE_ALLOW_NUMERIC = 1,
00895 UDAT_PARSE_PARTIAL_LITERAL_MATCH = 2,
00901 UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH = 3,
00902
00903
00904
00909 UDAT_BOOLEAN_ATTRIBUTE_COUNT = 4
00910 } UDateFormatBooleanAttribute;
00911
00922 U_CAPI UBool U_EXPORT2
00923 udat_getBooleanAttribute(const UDateFormat* fmt, UDateFormatBooleanAttribute attr, UErrorCode* status);
00924
00935 U_CAPI void U_EXPORT2
00936 udat_setBooleanAttribute(UDateFormat *fmt, UDateFormatBooleanAttribute attr, UBool newValue, UErrorCode* status);
00937
00938
00939
00940 #if U_SHOW_CPLUSPLUS_API
00941
00942 U_NAMESPACE_BEGIN
00943
00953 U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateFormatPointer, UDateFormat, udat_close);
00954
00955 U_NAMESPACE_END
00956
00957 #endif
00958
00967 U_CAPI UDateFormat* U_EXPORT2
00968 udat_clone(const UDateFormat *fmt,
00969 UErrorCode *status);
00970
00989 U_CAPI int32_t U_EXPORT2
00990 udat_format( const UDateFormat* format,
00991 UDate dateToFormat,
00992 UChar* result,
00993 int32_t resultLength,
00994 UFieldPosition* position,
00995 UErrorCode* status);
00996
01019 U_CAPI int32_t U_EXPORT2
01020 udat_formatCalendar( const UDateFormat* format,
01021 UCalendar* calendar,
01022 UChar* result,
01023 int32_t capacity,
01024 UFieldPosition* position,
01025 UErrorCode* status);
01026
01054 U_CAPI int32_t U_EXPORT2
01055 udat_formatForFields( const UDateFormat* format,
01056 UDate dateToFormat,
01057 UChar* result,
01058 int32_t resultLength,
01059 UFieldPositionIterator* fpositer,
01060 UErrorCode* status);
01061
01092 U_CAPI int32_t U_EXPORT2
01093 udat_formatCalendarForFields( const UDateFormat* format,
01094 UCalendar* calendar,
01095 UChar* result,
01096 int32_t capacity,
01097 UFieldPositionIterator* fpositer,
01098 UErrorCode* status);
01099
01100
01126 U_CAPI UDate U_EXPORT2
01127 udat_parse(const UDateFormat* format,
01128 const UChar* text,
01129 int32_t textLength,
01130 int32_t *parsePos,
01131 UErrorCode *status);
01132
01154 U_CAPI void U_EXPORT2
01155 udat_parseCalendar(const UDateFormat* format,
01156 UCalendar* calendar,
01157 const UChar* text,
01158 int32_t textLength,
01159 int32_t *parsePos,
01160 UErrorCode *status);
01161
01171 U_CAPI UBool U_EXPORT2
01172 udat_isLenient(const UDateFormat* fmt);
01173
01183 U_CAPI void U_EXPORT2
01184 udat_setLenient( UDateFormat* fmt,
01185 UBool isLenient);
01186
01196 U_CAPI const UCalendar* U_EXPORT2
01197 udat_getCalendar(const UDateFormat* fmt);
01198
01208 U_CAPI void U_EXPORT2
01209 udat_setCalendar( UDateFormat* fmt,
01210 const UCalendar* calendarToSet);
01211
01221 U_CAPI const UNumberFormat* U_EXPORT2
01222 udat_getNumberFormat(const UDateFormat* fmt);
01223
01233 U_CAPI const UNumberFormat* U_EXPORT2
01234 udat_getNumberFormatForField(const UDateFormat* fmt, UChar field);
01235
01251 U_CAPI void U_EXPORT2
01252 udat_adoptNumberFormatForFields( UDateFormat* fmt,
01253 const UChar* fields,
01254 UNumberFormat* numberFormatToSet,
01255 UErrorCode* status);
01268 U_CAPI void U_EXPORT2
01269 udat_setNumberFormat( UDateFormat* fmt,
01270 const UNumberFormat* numberFormatToSet);
01280 U_CAPI void U_EXPORT2
01281 udat_adoptNumberFormat( UDateFormat* fmt,
01282 UNumberFormat* numberFormatToAdopt);
01292 U_CAPI const char* U_EXPORT2
01293 udat_getAvailable(int32_t localeIndex);
01294
01303 U_CAPI int32_t U_EXPORT2
01304 udat_countAvailable(void);
01305
01316 U_CAPI UDate U_EXPORT2
01317 udat_get2DigitYearStart( const UDateFormat *fmt,
01318 UErrorCode *status);
01319
01330 U_CAPI void U_EXPORT2
01331 udat_set2DigitYearStart( UDateFormat *fmt,
01332 UDate d,
01333 UErrorCode *status);
01334
01347 U_CAPI int32_t U_EXPORT2
01348 udat_toPattern( const UDateFormat *fmt,
01349 UBool localized,
01350 UChar *result,
01351 int32_t resultLength,
01352 UErrorCode *status);
01353
01364 U_CAPI void U_EXPORT2
01365 udat_applyPattern( UDateFormat *format,
01366 UBool localized,
01367 const UChar *pattern,
01368 int32_t patternLength);
01369
01374 typedef enum UDateFormatSymbolType {
01376 UDAT_ERAS,
01378 UDAT_MONTHS,
01380 UDAT_SHORT_MONTHS,
01382 UDAT_WEEKDAYS,
01387 UDAT_SHORT_WEEKDAYS,
01389 UDAT_AM_PMS,
01391 UDAT_LOCALIZED_CHARS,
01393 UDAT_ERA_NAMES,
01395 UDAT_NARROW_MONTHS,
01397 UDAT_NARROW_WEEKDAYS,
01399 UDAT_STANDALONE_MONTHS,
01400 UDAT_STANDALONE_SHORT_MONTHS,
01401 UDAT_STANDALONE_NARROW_MONTHS,
01403 UDAT_STANDALONE_WEEKDAYS,
01408 UDAT_STANDALONE_SHORT_WEEKDAYS,
01410 UDAT_STANDALONE_NARROW_WEEKDAYS,
01412 UDAT_QUARTERS,
01414 UDAT_SHORT_QUARTERS,
01416 UDAT_STANDALONE_QUARTERS,
01417 UDAT_STANDALONE_SHORT_QUARTERS,
01425 UDAT_SHORTER_WEEKDAYS,
01430 UDAT_STANDALONE_SHORTER_WEEKDAYS,
01436 UDAT_CYCLIC_YEARS_WIDE,
01441 UDAT_CYCLIC_YEARS_ABBREVIATED,
01447 UDAT_CYCLIC_YEARS_NARROW,
01453 UDAT_ZODIAC_NAMES_WIDE,
01458 UDAT_ZODIAC_NAMES_ABBREVIATED,
01464 UDAT_ZODIAC_NAMES_NARROW
01465 } UDateFormatSymbolType;
01466
01467 struct UDateFormatSymbols;
01472 typedef struct UDateFormatSymbols UDateFormatSymbols;
01473
01490 U_CAPI int32_t U_EXPORT2
01491 udat_getSymbols(const UDateFormat *fmt,
01492 UDateFormatSymbolType type,
01493 int32_t symbolIndex,
01494 UChar *result,
01495 int32_t resultLength,
01496 UErrorCode *status);
01497
01510 U_CAPI int32_t U_EXPORT2
01511 udat_countSymbols( const UDateFormat *fmt,
01512 UDateFormatSymbolType type);
01513
01529 U_CAPI void U_EXPORT2
01530 udat_setSymbols( UDateFormat *format,
01531 UDateFormatSymbolType type,
01532 int32_t symbolIndex,
01533 UChar *value,
01534 int32_t valueLength,
01535 UErrorCode *status);
01536
01546 U_CAPI const char* U_EXPORT2
01547 udat_getLocaleByType(const UDateFormat *fmt,
01548 ULocDataLocaleType type,
01549 UErrorCode* status);
01550
01559 U_CAPI void U_EXPORT2
01560 udat_setContext(UDateFormat* fmt, UDisplayContext value, UErrorCode* status);
01561
01571 U_CAPI UDisplayContext U_EXPORT2
01572 udat_getContext(const UDateFormat* fmt, UDisplayContextType type, UErrorCode* status);
01573
01574 #ifndef U_HIDE_INTERNAL_API
01575
01586 U_INTERNAL int32_t U_EXPORT2
01587 udat_toPatternRelativeDate(const UDateFormat *fmt,
01588 UChar *result,
01589 int32_t resultLength,
01590 UErrorCode *status);
01591
01603 U_INTERNAL int32_t U_EXPORT2
01604 udat_toPatternRelativeTime(const UDateFormat *fmt,
01605 UChar *result,
01606 int32_t resultLength,
01607 UErrorCode *status);
01608
01621 U_INTERNAL void U_EXPORT2
01622 udat_applyPatternRelative(UDateFormat *format,
01623 const UChar *datePattern,
01624 int32_t datePatternLength,
01625 const UChar *timePattern,
01626 int32_t timePatternLength,
01627 UErrorCode *status);
01628
01633 typedef UDateFormat* (U_EXPORT2 *UDateFormatOpener) (UDateFormatStyle timeStyle,
01634 UDateFormatStyle dateStyle,
01635 const char *locale,
01636 const UChar *tzID,
01637 int32_t tzIDLength,
01638 const UChar *pattern,
01639 int32_t patternLength,
01640 UErrorCode *status);
01641
01646 U_INTERNAL void U_EXPORT2
01647 udat_registerOpener(UDateFormatOpener opener, UErrorCode *status);
01648
01653 U_INTERNAL UDateFormatOpener U_EXPORT2
01654 udat_unregisterOpener(UDateFormatOpener opener, UErrorCode *status);
01655 #endif
01656
01657
01658 #endif
01659
01660 #endif