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
00485 #ifndef U_HIDE_INTERNAL_API
00486
00491 #define JP_ERA_2019_ROOT "Reiwa"
00492
00497 #define JP_ERA_2019_JA "\\u4EE4\\u548C"
00498
00503 #define JP_ERA_2019_NARROW "R"
00504 #endif // U_HIDE_INTERNAL_API
00505
00511 typedef enum UDateFormatField {
00517 UDAT_ERA_FIELD = 0,
00518
00524 UDAT_YEAR_FIELD = 1,
00525
00531 UDAT_MONTH_FIELD = 2,
00532
00538 UDAT_DATE_FIELD = 3,
00539
00547 UDAT_HOUR_OF_DAY1_FIELD = 4,
00548
00556 UDAT_HOUR_OF_DAY0_FIELD = 5,
00557
00563 UDAT_MINUTE_FIELD = 6,
00564
00570 UDAT_SECOND_FIELD = 7,
00571
00585 UDAT_FRACTIONAL_SECOND_FIELD = 8,
00586
00592 UDAT_DAY_OF_WEEK_FIELD = 9,
00593
00599 UDAT_DAY_OF_YEAR_FIELD = 10,
00600
00606 UDAT_DAY_OF_WEEK_IN_MONTH_FIELD = 11,
00607
00613 UDAT_WEEK_OF_YEAR_FIELD = 12,
00614
00620 UDAT_WEEK_OF_MONTH_FIELD = 13,
00621
00627 UDAT_AM_PM_FIELD = 14,
00628
00636 UDAT_HOUR1_FIELD = 15,
00637
00645 UDAT_HOUR0_FIELD = 16,
00646
00653 UDAT_TIMEZONE_FIELD = 17,
00654
00660 UDAT_YEAR_WOY_FIELD = 18,
00661
00667 UDAT_DOW_LOCAL_FIELD = 19,
00668
00674 UDAT_EXTENDED_YEAR_FIELD = 20,
00675
00681 UDAT_JULIAN_DAY_FIELD = 21,
00682
00688 UDAT_MILLISECONDS_IN_DAY_FIELD = 22,
00689
00696 UDAT_TIMEZONE_RFC_FIELD = 23,
00697
00703 UDAT_TIMEZONE_GENERIC_FIELD = 24,
00710 UDAT_STANDALONE_DAY_FIELD = 25,
00711
00718 UDAT_STANDALONE_MONTH_FIELD = 26,
00719
00727 UDAT_QUARTER_FIELD = 27,
00728
00736 UDAT_STANDALONE_QUARTER_FIELD = 28,
00737
00743 UDAT_TIMEZONE_SPECIAL_FIELD = 29,
00744
00752 UDAT_YEAR_NAME_FIELD = 30,
00753
00760 UDAT_TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD = 31,
00761
00768 UDAT_TIMEZONE_ISO_FIELD = 32,
00769
00776 UDAT_TIMEZONE_ISO_LOCAL_FIELD = 33,
00777
00778 #ifndef U_HIDE_INTERNAL_API
00779
00784 UDAT_RELATED_YEAR_FIELD = 34,
00785 #endif
00786
00793 UDAT_AM_PM_MIDNIGHT_NOON_FIELD = 35,
00794
00795
00796
00797
00798
00799 UDAT_FLEXIBLE_DAY_PERIOD_FIELD = 36,
00800
00801 #ifndef U_HIDE_INTERNAL_API
00802
00808 UDAT_TIME_SEPARATOR_FIELD = 37,
00809 #endif
00810
00811 #ifndef U_HIDE_DEPRECATED_API
00812
00818 UDAT_FIELD_COUNT = 38
00819 #endif
00820 } UDateFormatField;
00821
00822
00823 #ifndef U_HIDE_INTERNAL_API
00824
00829 #define UDAT_HAS_PATTERN_CHAR_FOR_TIME_SEPARATOR 0
00830 #endif
00831
00832
00841 U_CAPI UCalendarDateFields U_EXPORT2
00842 udat_toCalendarDateField(UDateFormatField field);
00843
00844
00873 U_CAPI UDateFormat* U_EXPORT2
00874 udat_open(UDateFormatStyle timeStyle,
00875 UDateFormatStyle dateStyle,
00876 const char *locale,
00877 const UChar *tzID,
00878 int32_t tzIDLength,
00879 const UChar *pattern,
00880 int32_t patternLength,
00881 UErrorCode *status);
00882
00883
00890 U_CAPI void U_EXPORT2
00891 udat_close(UDateFormat* format);
00892
00893
00899 typedef enum UDateFormatBooleanAttribute {
00904 UDAT_PARSE_ALLOW_WHITESPACE = 0,
00910 UDAT_PARSE_ALLOW_NUMERIC = 1,
00916 UDAT_PARSE_PARTIAL_LITERAL_MATCH = 2,
00922 UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH = 3,
00923
00924
00925
00930 UDAT_BOOLEAN_ATTRIBUTE_COUNT = 4
00931 } UDateFormatBooleanAttribute;
00932
00943 U_CAPI UBool U_EXPORT2
00944 udat_getBooleanAttribute(const UDateFormat* fmt, UDateFormatBooleanAttribute attr, UErrorCode* status);
00945
00956 U_CAPI void U_EXPORT2
00957 udat_setBooleanAttribute(UDateFormat *fmt, UDateFormatBooleanAttribute attr, UBool newValue, UErrorCode* status);
00958
00959
00960
00961 #if U_SHOW_CPLUSPLUS_API
00962
00963 U_NAMESPACE_BEGIN
00964
00974 U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateFormatPointer, UDateFormat, udat_close);
00975
00976 U_NAMESPACE_END
00977
00978 #endif
00979
00988 U_CAPI UDateFormat* U_EXPORT2
00989 udat_clone(const UDateFormat *fmt,
00990 UErrorCode *status);
00991
01010 U_CAPI int32_t U_EXPORT2
01011 udat_format( const UDateFormat* format,
01012 UDate dateToFormat,
01013 UChar* result,
01014 int32_t resultLength,
01015 UFieldPosition* position,
01016 UErrorCode* status);
01017
01040 U_CAPI int32_t U_EXPORT2
01041 udat_formatCalendar( const UDateFormat* format,
01042 UCalendar* calendar,
01043 UChar* result,
01044 int32_t capacity,
01045 UFieldPosition* position,
01046 UErrorCode* status);
01047
01075 U_CAPI int32_t U_EXPORT2
01076 udat_formatForFields( const UDateFormat* format,
01077 UDate dateToFormat,
01078 UChar* result,
01079 int32_t resultLength,
01080 UFieldPositionIterator* fpositer,
01081 UErrorCode* status);
01082
01113 U_CAPI int32_t U_EXPORT2
01114 udat_formatCalendarForFields( const UDateFormat* format,
01115 UCalendar* calendar,
01116 UChar* result,
01117 int32_t capacity,
01118 UFieldPositionIterator* fpositer,
01119 UErrorCode* status);
01120
01121
01147 U_CAPI UDate U_EXPORT2
01148 udat_parse(const UDateFormat* format,
01149 const UChar* text,
01150 int32_t textLength,
01151 int32_t *parsePos,
01152 UErrorCode *status);
01153
01175 U_CAPI void U_EXPORT2
01176 udat_parseCalendar(const UDateFormat* format,
01177 UCalendar* calendar,
01178 const UChar* text,
01179 int32_t textLength,
01180 int32_t *parsePos,
01181 UErrorCode *status);
01182
01192 U_CAPI UBool U_EXPORT2
01193 udat_isLenient(const UDateFormat* fmt);
01194
01204 U_CAPI void U_EXPORT2
01205 udat_setLenient( UDateFormat* fmt,
01206 UBool isLenient);
01207
01217 U_CAPI const UCalendar* U_EXPORT2
01218 udat_getCalendar(const UDateFormat* fmt);
01219
01229 U_CAPI void U_EXPORT2
01230 udat_setCalendar( UDateFormat* fmt,
01231 const UCalendar* calendarToSet);
01232
01242 U_CAPI const UNumberFormat* U_EXPORT2
01243 udat_getNumberFormat(const UDateFormat* fmt);
01244
01254 U_CAPI const UNumberFormat* U_EXPORT2
01255 udat_getNumberFormatForField(const UDateFormat* fmt, UChar field);
01256
01272 U_CAPI void U_EXPORT2
01273 udat_adoptNumberFormatForFields( UDateFormat* fmt,
01274 const UChar* fields,
01275 UNumberFormat* numberFormatToSet,
01276 UErrorCode* status);
01289 U_CAPI void U_EXPORT2
01290 udat_setNumberFormat( UDateFormat* fmt,
01291 const UNumberFormat* numberFormatToSet);
01301 U_CAPI void U_EXPORT2
01302 udat_adoptNumberFormat( UDateFormat* fmt,
01303 UNumberFormat* numberFormatToAdopt);
01313 U_CAPI const char* U_EXPORT2
01314 udat_getAvailable(int32_t localeIndex);
01315
01324 U_CAPI int32_t U_EXPORT2
01325 udat_countAvailable(void);
01326
01337 U_CAPI UDate U_EXPORT2
01338 udat_get2DigitYearStart( const UDateFormat *fmt,
01339 UErrorCode *status);
01340
01351 U_CAPI void U_EXPORT2
01352 udat_set2DigitYearStart( UDateFormat *fmt,
01353 UDate d,
01354 UErrorCode *status);
01355
01368 U_CAPI int32_t U_EXPORT2
01369 udat_toPattern( const UDateFormat *fmt,
01370 UBool localized,
01371 UChar *result,
01372 int32_t resultLength,
01373 UErrorCode *status);
01374
01385 U_CAPI void U_EXPORT2
01386 udat_applyPattern( UDateFormat *format,
01387 UBool localized,
01388 const UChar *pattern,
01389 int32_t patternLength);
01390
01395 typedef enum UDateFormatSymbolType {
01397 UDAT_ERAS,
01399 UDAT_MONTHS,
01401 UDAT_SHORT_MONTHS,
01403 UDAT_WEEKDAYS,
01408 UDAT_SHORT_WEEKDAYS,
01410 UDAT_AM_PMS,
01412 UDAT_LOCALIZED_CHARS,
01414 UDAT_ERA_NAMES,
01416 UDAT_NARROW_MONTHS,
01418 UDAT_NARROW_WEEKDAYS,
01420 UDAT_STANDALONE_MONTHS,
01421 UDAT_STANDALONE_SHORT_MONTHS,
01422 UDAT_STANDALONE_NARROW_MONTHS,
01424 UDAT_STANDALONE_WEEKDAYS,
01429 UDAT_STANDALONE_SHORT_WEEKDAYS,
01431 UDAT_STANDALONE_NARROW_WEEKDAYS,
01433 UDAT_QUARTERS,
01435 UDAT_SHORT_QUARTERS,
01437 UDAT_STANDALONE_QUARTERS,
01438 UDAT_STANDALONE_SHORT_QUARTERS,
01446 UDAT_SHORTER_WEEKDAYS,
01451 UDAT_STANDALONE_SHORTER_WEEKDAYS,
01457 UDAT_CYCLIC_YEARS_WIDE,
01462 UDAT_CYCLIC_YEARS_ABBREVIATED,
01468 UDAT_CYCLIC_YEARS_NARROW,
01474 UDAT_ZODIAC_NAMES_WIDE,
01479 UDAT_ZODIAC_NAMES_ABBREVIATED,
01485 UDAT_ZODIAC_NAMES_NARROW
01486 } UDateFormatSymbolType;
01487
01488 struct UDateFormatSymbols;
01493 typedef struct UDateFormatSymbols UDateFormatSymbols;
01494
01511 U_CAPI int32_t U_EXPORT2
01512 udat_getSymbols(const UDateFormat *fmt,
01513 UDateFormatSymbolType type,
01514 int32_t symbolIndex,
01515 UChar *result,
01516 int32_t resultLength,
01517 UErrorCode *status);
01518
01531 U_CAPI int32_t U_EXPORT2
01532 udat_countSymbols( const UDateFormat *fmt,
01533 UDateFormatSymbolType type);
01534
01550 U_CAPI void U_EXPORT2
01551 udat_setSymbols( UDateFormat *format,
01552 UDateFormatSymbolType type,
01553 int32_t symbolIndex,
01554 UChar *value,
01555 int32_t valueLength,
01556 UErrorCode *status);
01557
01567 U_CAPI const char* U_EXPORT2
01568 udat_getLocaleByType(const UDateFormat *fmt,
01569 ULocDataLocaleType type,
01570 UErrorCode* status);
01571
01580 U_CAPI void U_EXPORT2
01581 udat_setContext(UDateFormat* fmt, UDisplayContext value, UErrorCode* status);
01582
01592 U_CAPI UDisplayContext U_EXPORT2
01593 udat_getContext(const UDateFormat* fmt, UDisplayContextType type, UErrorCode* status);
01594
01595 #ifndef U_HIDE_INTERNAL_API
01596
01607 U_INTERNAL int32_t U_EXPORT2
01608 udat_toPatternRelativeDate(const UDateFormat *fmt,
01609 UChar *result,
01610 int32_t resultLength,
01611 UErrorCode *status);
01612
01624 U_INTERNAL int32_t U_EXPORT2
01625 udat_toPatternRelativeTime(const UDateFormat *fmt,
01626 UChar *result,
01627 int32_t resultLength,
01628 UErrorCode *status);
01629
01642 U_INTERNAL void U_EXPORT2
01643 udat_applyPatternRelative(UDateFormat *format,
01644 const UChar *datePattern,
01645 int32_t datePatternLength,
01646 const UChar *timePattern,
01647 int32_t timePatternLength,
01648 UErrorCode *status);
01649
01654 typedef UDateFormat* (U_EXPORT2 *UDateFormatOpener) (UDateFormatStyle timeStyle,
01655 UDateFormatStyle dateStyle,
01656 const char *locale,
01657 const UChar *tzID,
01658 int32_t tzIDLength,
01659 const UChar *pattern,
01660 int32_t patternLength,
01661 UErrorCode *status);
01662
01667 U_INTERNAL void U_EXPORT2
01668 udat_registerOpener(UDateFormatOpener opener, UErrorCode *status);
01669
01674 U_INTERNAL UDateFormatOpener U_EXPORT2
01675 udat_unregisterOpener(UDateFormatOpener opener, UErrorCode *status);
01676 #endif
01677
01678
01679 #endif
01680
01681 #endif