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/ucal.h"
00018 #include "unicode/unum.h"
00019 #include "unicode/udisplaycontext.h"
00020 #include "unicode/ufieldpositer.h"
00021
00022 #if U_SHOW_CPLUSPLUS_API
00023 #include "unicode/localpointer.h"
00024 #endif // U_SHOW_CPLUSPLUS_API
00025
00157 typedef void* UDateFormat;
00158
00162 typedef enum UDateFormatStyle {
00164 UDAT_FULL,
00166 UDAT_LONG,
00168 UDAT_MEDIUM,
00170 UDAT_SHORT,
00172 UDAT_DEFAULT = UDAT_MEDIUM,
00173
00175 UDAT_RELATIVE = (1 << 7),
00176
00177 UDAT_FULL_RELATIVE = UDAT_FULL | UDAT_RELATIVE,
00178
00179 UDAT_LONG_RELATIVE = UDAT_LONG | UDAT_RELATIVE,
00180
00181 UDAT_MEDIUM_RELATIVE = UDAT_MEDIUM | UDAT_RELATIVE,
00182
00183 UDAT_SHORT_RELATIVE = UDAT_SHORT | UDAT_RELATIVE,
00184
00185
00187 UDAT_NONE = -1,
00188
00194 UDAT_PATTERN = -2,
00195
00196 #ifndef U_HIDE_INTERNAL_API
00198 UDAT_IGNORE = UDAT_PATTERN
00199 #endif
00200 } UDateFormatStyle;
00201
00202
00203
00208 #define UDAT_YEAR "y"
00209
00213 #define UDAT_QUARTER "QQQQ"
00214
00218 #define UDAT_ABBR_QUARTER "QQQ"
00219
00223 #define UDAT_YEAR_QUARTER "yQQQQ"
00224
00228 #define UDAT_YEAR_ABBR_QUARTER "yQQQ"
00229
00233 #define UDAT_MONTH "MMMM"
00234
00238 #define UDAT_ABBR_MONTH "MMM"
00239
00243 #define UDAT_NUM_MONTH "M"
00244
00248 #define UDAT_YEAR_MONTH "yMMMM"
00249
00253 #define UDAT_YEAR_ABBR_MONTH "yMMM"
00254
00258 #define UDAT_YEAR_NUM_MONTH "yM"
00259
00263 #define UDAT_DAY "d"
00264
00269 #define UDAT_YEAR_MONTH_DAY "yMMMMd"
00270
00275 #define UDAT_YEAR_ABBR_MONTH_DAY "yMMMd"
00276
00281 #define UDAT_YEAR_NUM_MONTH_DAY "yMd"
00282
00286 #define UDAT_WEEKDAY "EEEE"
00287
00291 #define UDAT_ABBR_WEEKDAY "E"
00292
00297 #define UDAT_YEAR_MONTH_WEEKDAY_DAY "yMMMMEEEEd"
00298
00303 #define UDAT_YEAR_ABBR_MONTH_WEEKDAY_DAY "yMMMEd"
00304
00309 #define UDAT_YEAR_NUM_MONTH_WEEKDAY_DAY "yMEd"
00310
00315 #define UDAT_MONTH_DAY "MMMMd"
00316
00321 #define UDAT_ABBR_MONTH_DAY "MMMd"
00322
00327 #define UDAT_NUM_MONTH_DAY "Md"
00328
00333 #define UDAT_MONTH_WEEKDAY_DAY "MMMMEEEEd"
00334
00339 #define UDAT_ABBR_MONTH_WEEKDAY_DAY "MMMEd"
00340
00345 #define UDAT_NUM_MONTH_WEEKDAY_DAY "MEd"
00346
00347
00348
00353 #define UDAT_HOUR "j"
00354
00358 #define UDAT_HOUR24 "H"
00359
00363 #define UDAT_MINUTE "m"
00364
00369 #define UDAT_HOUR_MINUTE "jm"
00370
00375 #define UDAT_HOUR24_MINUTE "Hm"
00376
00380 #define UDAT_SECOND "s"
00381
00387 #define UDAT_HOUR_MINUTE_SECOND "jms"
00388
00394 #define UDAT_HOUR24_MINUTE_SECOND "Hms"
00395
00400 #define UDAT_MINUTE_SECOND "ms"
00401
00402
00403
00411 #define UDAT_LOCATION_TZ "VVVV"
00412
00419 #define UDAT_GENERIC_TZ "vvvv"
00420
00427 #define UDAT_ABBR_GENERIC_TZ "v"
00428
00435 #define UDAT_SPECIFIC_TZ "zzzz"
00436
00443 #define UDAT_ABBR_SPECIFIC_TZ "z"
00444
00451 #define UDAT_ABBR_UTC_TZ "ZZZZ"
00452
00453
00454
00455 #ifndef U_HIDE_DEPRECATED_API
00456
00460 #define UDAT_STANDALONE_MONTH "LLLL"
00461
00465 #define UDAT_ABBR_STANDALONE_MONTH "LLL"
00466
00471 #define UDAT_HOUR_MINUTE_GENERIC_TZ "jmv"
00472
00476 #define UDAT_HOUR_MINUTE_TZ "jmz"
00477
00481 #define UDAT_HOUR_GENERIC_TZ "jv"
00482
00486 #define UDAT_HOUR_TZ "jz"
00487 #endif
00488
00489 #ifndef U_HIDE_INTERNAL_API
00490
00495 #define JP_ERA_2019_ROOT "Reiwa"
00496
00501 #define JP_ERA_2019_JA "\\u4EE4\\u548C"
00502
00507 #define JP_ERA_2019_NARROW "R"
00508 #endif // U_HIDE_INTERNAL_API
00509
00515 typedef enum UDateFormatField {
00521 UDAT_ERA_FIELD = 0,
00522
00528 UDAT_YEAR_FIELD = 1,
00529
00535 UDAT_MONTH_FIELD = 2,
00536
00542 UDAT_DATE_FIELD = 3,
00543
00551 UDAT_HOUR_OF_DAY1_FIELD = 4,
00552
00560 UDAT_HOUR_OF_DAY0_FIELD = 5,
00561
00567 UDAT_MINUTE_FIELD = 6,
00568
00574 UDAT_SECOND_FIELD = 7,
00575
00589 UDAT_FRACTIONAL_SECOND_FIELD = 8,
00590
00596 UDAT_DAY_OF_WEEK_FIELD = 9,
00597
00603 UDAT_DAY_OF_YEAR_FIELD = 10,
00604
00610 UDAT_DAY_OF_WEEK_IN_MONTH_FIELD = 11,
00611
00617 UDAT_WEEK_OF_YEAR_FIELD = 12,
00618
00624 UDAT_WEEK_OF_MONTH_FIELD = 13,
00625
00631 UDAT_AM_PM_FIELD = 14,
00632
00640 UDAT_HOUR1_FIELD = 15,
00641
00649 UDAT_HOUR0_FIELD = 16,
00650
00657 UDAT_TIMEZONE_FIELD = 17,
00658
00664 UDAT_YEAR_WOY_FIELD = 18,
00665
00671 UDAT_DOW_LOCAL_FIELD = 19,
00672
00678 UDAT_EXTENDED_YEAR_FIELD = 20,
00679
00685 UDAT_JULIAN_DAY_FIELD = 21,
00686
00692 UDAT_MILLISECONDS_IN_DAY_FIELD = 22,
00693
00700 UDAT_TIMEZONE_RFC_FIELD = 23,
00701
00707 UDAT_TIMEZONE_GENERIC_FIELD = 24,
00714 UDAT_STANDALONE_DAY_FIELD = 25,
00715
00722 UDAT_STANDALONE_MONTH_FIELD = 26,
00723
00731 UDAT_QUARTER_FIELD = 27,
00732
00740 UDAT_STANDALONE_QUARTER_FIELD = 28,
00741
00747 UDAT_TIMEZONE_SPECIAL_FIELD = 29,
00748
00756 UDAT_YEAR_NAME_FIELD = 30,
00757
00764 UDAT_TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD = 31,
00765
00772 UDAT_TIMEZONE_ISO_FIELD = 32,
00773
00780 UDAT_TIMEZONE_ISO_LOCAL_FIELD = 33,
00781
00782 #ifndef U_HIDE_INTERNAL_API
00783
00788 UDAT_RELATED_YEAR_FIELD = 34,
00789 #endif
00790
00797 UDAT_AM_PM_MIDNIGHT_NOON_FIELD = 35,
00798
00799
00800
00801
00802
00803 UDAT_FLEXIBLE_DAY_PERIOD_FIELD = 36,
00804
00805 #ifndef U_HIDE_INTERNAL_API
00806
00812 UDAT_TIME_SEPARATOR_FIELD = 37,
00813 #endif
00814
00815 #ifndef U_HIDE_DEPRECATED_API
00816
00822 UDAT_FIELD_COUNT = 38
00823 #endif
00824 } UDateFormatField;
00825
00826
00827 #ifndef U_HIDE_INTERNAL_API
00828
00833 #define UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR 0
00834 #endif
00835
00836
00859 U_CAPI UCalendarDateFields U_EXPORT2
00860 udat_toCalendarDateField(UDateFormatField field);
00861
00862
00891 U_CAPI UDateFormat* U_EXPORT2
00892 udat_open(UDateFormatStyle timeStyle,
00893 UDateFormatStyle dateStyle,
00894 const char *locale,
00895 const UChar *tzID,
00896 int32_t tzIDLength,
00897 const UChar *pattern,
00898 int32_t patternLength,
00899 UErrorCode *status);
00900
00901
00908 U_CAPI void U_EXPORT2
00909 udat_close(UDateFormat* format);
00910
00911
00917 typedef enum UDateFormatBooleanAttribute {
00922 UDAT_PARSE_ALLOW_WHITESPACE = 0,
00928 UDAT_PARSE_ALLOW_NUMERIC = 1,
00934 UDAT_PARSE_PARTIAL_LITERAL_MATCH = 2,
00940 UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH = 3,
00941
00942
00943
00944 #ifndef U_FORCE_HIDE_DEPRECATED_API
00945
00949 UDAT_BOOLEAN_ATTRIBUTE_COUNT = 4
00950 #endif // U_FORCE_HIDE_DEPRECATED_API
00951 } UDateFormatBooleanAttribute;
00952
00963 U_CAPI UBool U_EXPORT2
00964 udat_getBooleanAttribute(const UDateFormat* fmt, UDateFormatBooleanAttribute attr, UErrorCode* status);
00965
00976 U_CAPI void U_EXPORT2
00977 udat_setBooleanAttribute(UDateFormat *fmt, UDateFormatBooleanAttribute attr, UBool newValue, UErrorCode* status);
00978
00983 typedef enum UDateFormatHourCycle {
00988 UDAT_HOUR_CYCLE_11,
00989
00994 UDAT_HOUR_CYCLE_12,
00995
01000 UDAT_HOUR_CYCLE_23,
01001
01006 UDAT_HOUR_CYCLE_24
01007 } UDateFormatHourCycle;
01008
01009 #if U_SHOW_CPLUSPLUS_API
01010
01011 U_NAMESPACE_BEGIN
01012
01022 U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateFormatPointer, UDateFormat, udat_close);
01023
01024 U_NAMESPACE_END
01025
01026 #endif
01027
01036 U_CAPI UDateFormat* U_EXPORT2
01037 udat_clone(const UDateFormat *fmt,
01038 UErrorCode *status);
01039
01058 U_CAPI int32_t U_EXPORT2
01059 udat_format( const UDateFormat* format,
01060 UDate dateToFormat,
01061 UChar* result,
01062 int32_t resultLength,
01063 UFieldPosition* position,
01064 UErrorCode* status);
01065
01088 U_CAPI int32_t U_EXPORT2
01089 udat_formatCalendar( const UDateFormat* format,
01090 UCalendar* calendar,
01091 UChar* result,
01092 int32_t capacity,
01093 UFieldPosition* position,
01094 UErrorCode* status);
01095
01123 U_CAPI int32_t U_EXPORT2
01124 udat_formatForFields( const UDateFormat* format,
01125 UDate dateToFormat,
01126 UChar* result,
01127 int32_t resultLength,
01128 UFieldPositionIterator* fpositer,
01129 UErrorCode* status);
01130
01161 U_CAPI int32_t U_EXPORT2
01162 udat_formatCalendarForFields( const UDateFormat* format,
01163 UCalendar* calendar,
01164 UChar* result,
01165 int32_t capacity,
01166 UFieldPositionIterator* fpositer,
01167 UErrorCode* status);
01168
01169
01195 U_CAPI UDate U_EXPORT2
01196 udat_parse(const UDateFormat* format,
01197 const UChar* text,
01198 int32_t textLength,
01199 int32_t *parsePos,
01200 UErrorCode *status);
01201
01223 U_CAPI void U_EXPORT2
01224 udat_parseCalendar(const UDateFormat* format,
01225 UCalendar* calendar,
01226 const UChar* text,
01227 int32_t textLength,
01228 int32_t *parsePos,
01229 UErrorCode *status);
01230
01240 U_CAPI UBool U_EXPORT2
01241 udat_isLenient(const UDateFormat* fmt);
01242
01252 U_CAPI void U_EXPORT2
01253 udat_setLenient( UDateFormat* fmt,
01254 UBool isLenient);
01255
01265 U_CAPI const UCalendar* U_EXPORT2
01266 udat_getCalendar(const UDateFormat* fmt);
01267
01277 U_CAPI void U_EXPORT2
01278 udat_setCalendar( UDateFormat* fmt,
01279 const UCalendar* calendarToSet);
01280
01290 U_CAPI const UNumberFormat* U_EXPORT2
01291 udat_getNumberFormat(const UDateFormat* fmt);
01292
01302 U_CAPI const UNumberFormat* U_EXPORT2
01303 udat_getNumberFormatForField(const UDateFormat* fmt, UChar field);
01304
01320 U_CAPI void U_EXPORT2
01321 udat_adoptNumberFormatForFields( UDateFormat* fmt,
01322 const UChar* fields,
01323 UNumberFormat* numberFormatToSet,
01324 UErrorCode* status);
01337 U_CAPI void U_EXPORT2
01338 udat_setNumberFormat( UDateFormat* fmt,
01339 const UNumberFormat* numberFormatToSet);
01349 U_CAPI void U_EXPORT2
01350 udat_adoptNumberFormat( UDateFormat* fmt,
01351 UNumberFormat* numberFormatToAdopt);
01361 U_CAPI const char* U_EXPORT2
01362 udat_getAvailable(int32_t localeIndex);
01363
01372 U_CAPI int32_t U_EXPORT2
01373 udat_countAvailable(void);
01374
01385 U_CAPI UDate U_EXPORT2
01386 udat_get2DigitYearStart( const UDateFormat *fmt,
01387 UErrorCode *status);
01388
01399 U_CAPI void U_EXPORT2
01400 udat_set2DigitYearStart( UDateFormat *fmt,
01401 UDate d,
01402 UErrorCode *status);
01403
01416 U_CAPI int32_t U_EXPORT2
01417 udat_toPattern( const UDateFormat *fmt,
01418 UBool localized,
01419 UChar *result,
01420 int32_t resultLength,
01421 UErrorCode *status);
01422
01433 U_CAPI void U_EXPORT2
01434 udat_applyPattern( UDateFormat *format,
01435 UBool localized,
01436 const UChar *pattern,
01437 int32_t patternLength);
01438
01443 typedef enum UDateFormatSymbolType {
01445 UDAT_ERAS,
01447 UDAT_MONTHS,
01449 UDAT_SHORT_MONTHS,
01451 UDAT_WEEKDAYS,
01456 UDAT_SHORT_WEEKDAYS,
01458 UDAT_AM_PMS,
01460 UDAT_LOCALIZED_CHARS,
01462 UDAT_ERA_NAMES,
01464 UDAT_NARROW_MONTHS,
01466 UDAT_NARROW_WEEKDAYS,
01468 UDAT_STANDALONE_MONTHS,
01469 UDAT_STANDALONE_SHORT_MONTHS,
01470 UDAT_STANDALONE_NARROW_MONTHS,
01472 UDAT_STANDALONE_WEEKDAYS,
01477 UDAT_STANDALONE_SHORT_WEEKDAYS,
01479 UDAT_STANDALONE_NARROW_WEEKDAYS,
01481 UDAT_QUARTERS,
01483 UDAT_SHORT_QUARTERS,
01485 UDAT_STANDALONE_QUARTERS,
01486 UDAT_STANDALONE_SHORT_QUARTERS,
01494 UDAT_SHORTER_WEEKDAYS,
01499 UDAT_STANDALONE_SHORTER_WEEKDAYS,
01505 UDAT_CYCLIC_YEARS_WIDE,
01510 UDAT_CYCLIC_YEARS_ABBREVIATED,
01516 UDAT_CYCLIC_YEARS_NARROW,
01522 UDAT_ZODIAC_NAMES_WIDE,
01527 UDAT_ZODIAC_NAMES_ABBREVIATED,
01533 UDAT_ZODIAC_NAMES_NARROW,
01534
01535 #ifndef U_HIDE_DRAFT_API
01536
01540 UDAT_NARROW_QUARTERS,
01541
01546 UDAT_STANDALONE_NARROW_QUARTERS
01547 #endif // U_HIDE_DRAFT_API
01548 } UDateFormatSymbolType;
01549
01550 struct UDateFormatSymbols;
01555 typedef struct UDateFormatSymbols UDateFormatSymbols;
01556
01573 U_CAPI int32_t U_EXPORT2
01574 udat_getSymbols(const UDateFormat *fmt,
01575 UDateFormatSymbolType type,
01576 int32_t symbolIndex,
01577 UChar *result,
01578 int32_t resultLength,
01579 UErrorCode *status);
01580
01593 U_CAPI int32_t U_EXPORT2
01594 udat_countSymbols( const UDateFormat *fmt,
01595 UDateFormatSymbolType type);
01596
01612 U_CAPI void U_EXPORT2
01613 udat_setSymbols( UDateFormat *format,
01614 UDateFormatSymbolType type,
01615 int32_t symbolIndex,
01616 UChar *value,
01617 int32_t valueLength,
01618 UErrorCode *status);
01619
01629 U_CAPI const char* U_EXPORT2
01630 udat_getLocaleByType(const UDateFormat *fmt,
01631 ULocDataLocaleType type,
01632 UErrorCode* status);
01633
01642 U_CAPI void U_EXPORT2
01643 udat_setContext(UDateFormat* fmt, UDisplayContext value, UErrorCode* status);
01644
01654 U_CAPI UDisplayContext U_EXPORT2
01655 udat_getContext(const UDateFormat* fmt, UDisplayContextType type, UErrorCode* status);
01656
01657 #ifndef U_HIDE_INTERNAL_API
01658
01669 U_CAPI int32_t U_EXPORT2
01670 udat_toPatternRelativeDate(const UDateFormat *fmt,
01671 UChar *result,
01672 int32_t resultLength,
01673 UErrorCode *status);
01674
01686 U_CAPI int32_t U_EXPORT2
01687 udat_toPatternRelativeTime(const UDateFormat *fmt,
01688 UChar *result,
01689 int32_t resultLength,
01690 UErrorCode *status);
01691
01704 U_CAPI void U_EXPORT2
01705 udat_applyPatternRelative(UDateFormat *format,
01706 const UChar *datePattern,
01707 int32_t datePatternLength,
01708 const UChar *timePattern,
01709 int32_t timePatternLength,
01710 UErrorCode *status);
01711
01716 typedef UDateFormat* (U_EXPORT2 *UDateFormatOpener) (UDateFormatStyle timeStyle,
01717 UDateFormatStyle dateStyle,
01718 const char *locale,
01719 const UChar *tzID,
01720 int32_t tzIDLength,
01721 const UChar *pattern,
01722 int32_t patternLength,
01723 UErrorCode *status);
01724
01729 U_CAPI void U_EXPORT2
01730 udat_registerOpener(UDateFormatOpener opener, UErrorCode *status);
01731
01736 U_CAPI UDateFormatOpener U_EXPORT2
01737 udat_unregisterOpener(UDateFormatOpener opener, UErrorCode *status);
01738 #endif
01739
01740
01741 #endif
01742
01743 #endif