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
00926 #ifndef U_FORCE_HIDE_DEPRECATED_API
00927
00931 UDAT_BOOLEAN_ATTRIBUTE_COUNT = 4
00932 #endif // U_FORCE_HIDE_DEPRECATED_API
00933 } UDateFormatBooleanAttribute;
00934
00945 U_CAPI UBool U_EXPORT2
00946 udat_getBooleanAttribute(const UDateFormat* fmt, UDateFormatBooleanAttribute attr, UErrorCode* status);
00947
00958 U_CAPI void U_EXPORT2
00959 udat_setBooleanAttribute(UDateFormat *fmt, UDateFormatBooleanAttribute attr, UBool newValue, UErrorCode* status);
00960
00961 #ifndef U_HIDE_DRAFT_API
00962
00966 typedef enum UDateFormatHourCycle {
00971 UDAT_HOUR_CYCLE_11,
00972
00977 UDAT_HOUR_CYCLE_12,
00978
00983 UDAT_HOUR_CYCLE_23,
00984
00989 UDAT_HOUR_CYCLE_24
00990 } UDateFormatHourCycle;
00991 #endif
00992
00993 #if U_SHOW_CPLUSPLUS_API
00994
00995 U_NAMESPACE_BEGIN
00996
01006 U_DEFINE_LOCAL_OPEN_POINTER(LocalUDateFormatPointer, UDateFormat, udat_close);
01007
01008 U_NAMESPACE_END
01009
01010 #endif
01011
01020 U_CAPI UDateFormat* U_EXPORT2
01021 udat_clone(const UDateFormat *fmt,
01022 UErrorCode *status);
01023
01042 U_CAPI int32_t U_EXPORT2
01043 udat_format( const UDateFormat* format,
01044 UDate dateToFormat,
01045 UChar* result,
01046 int32_t resultLength,
01047 UFieldPosition* position,
01048 UErrorCode* status);
01049
01072 U_CAPI int32_t U_EXPORT2
01073 udat_formatCalendar( const UDateFormat* format,
01074 UCalendar* calendar,
01075 UChar* result,
01076 int32_t capacity,
01077 UFieldPosition* position,
01078 UErrorCode* status);
01079
01107 U_CAPI int32_t U_EXPORT2
01108 udat_formatForFields( const UDateFormat* format,
01109 UDate dateToFormat,
01110 UChar* result,
01111 int32_t resultLength,
01112 UFieldPositionIterator* fpositer,
01113 UErrorCode* status);
01114
01145 U_CAPI int32_t U_EXPORT2
01146 udat_formatCalendarForFields( const UDateFormat* format,
01147 UCalendar* calendar,
01148 UChar* result,
01149 int32_t capacity,
01150 UFieldPositionIterator* fpositer,
01151 UErrorCode* status);
01152
01153
01179 U_CAPI UDate U_EXPORT2
01180 udat_parse(const UDateFormat* format,
01181 const UChar* text,
01182 int32_t textLength,
01183 int32_t *parsePos,
01184 UErrorCode *status);
01185
01207 U_CAPI void U_EXPORT2
01208 udat_parseCalendar(const UDateFormat* format,
01209 UCalendar* calendar,
01210 const UChar* text,
01211 int32_t textLength,
01212 int32_t *parsePos,
01213 UErrorCode *status);
01214
01224 U_CAPI UBool U_EXPORT2
01225 udat_isLenient(const UDateFormat* fmt);
01226
01236 U_CAPI void U_EXPORT2
01237 udat_setLenient( UDateFormat* fmt,
01238 UBool isLenient);
01239
01249 U_CAPI const UCalendar* U_EXPORT2
01250 udat_getCalendar(const UDateFormat* fmt);
01251
01261 U_CAPI void U_EXPORT2
01262 udat_setCalendar( UDateFormat* fmt,
01263 const UCalendar* calendarToSet);
01264
01274 U_CAPI const UNumberFormat* U_EXPORT2
01275 udat_getNumberFormat(const UDateFormat* fmt);
01276
01286 U_CAPI const UNumberFormat* U_EXPORT2
01287 udat_getNumberFormatForField(const UDateFormat* fmt, UChar field);
01288
01304 U_CAPI void U_EXPORT2
01305 udat_adoptNumberFormatForFields( UDateFormat* fmt,
01306 const UChar* fields,
01307 UNumberFormat* numberFormatToSet,
01308 UErrorCode* status);
01321 U_CAPI void U_EXPORT2
01322 udat_setNumberFormat( UDateFormat* fmt,
01323 const UNumberFormat* numberFormatToSet);
01333 U_CAPI void U_EXPORT2
01334 udat_adoptNumberFormat( UDateFormat* fmt,
01335 UNumberFormat* numberFormatToAdopt);
01345 U_CAPI const char* U_EXPORT2
01346 udat_getAvailable(int32_t localeIndex);
01347
01356 U_CAPI int32_t U_EXPORT2
01357 udat_countAvailable(void);
01358
01369 U_CAPI UDate U_EXPORT2
01370 udat_get2DigitYearStart( const UDateFormat *fmt,
01371 UErrorCode *status);
01372
01383 U_CAPI void U_EXPORT2
01384 udat_set2DigitYearStart( UDateFormat *fmt,
01385 UDate d,
01386 UErrorCode *status);
01387
01400 U_CAPI int32_t U_EXPORT2
01401 udat_toPattern( const UDateFormat *fmt,
01402 UBool localized,
01403 UChar *result,
01404 int32_t resultLength,
01405 UErrorCode *status);
01406
01417 U_CAPI void U_EXPORT2
01418 udat_applyPattern( UDateFormat *format,
01419 UBool localized,
01420 const UChar *pattern,
01421 int32_t patternLength);
01422
01427 typedef enum UDateFormatSymbolType {
01429 UDAT_ERAS,
01431 UDAT_MONTHS,
01433 UDAT_SHORT_MONTHS,
01435 UDAT_WEEKDAYS,
01440 UDAT_SHORT_WEEKDAYS,
01442 UDAT_AM_PMS,
01444 UDAT_LOCALIZED_CHARS,
01446 UDAT_ERA_NAMES,
01448 UDAT_NARROW_MONTHS,
01450 UDAT_NARROW_WEEKDAYS,
01452 UDAT_STANDALONE_MONTHS,
01453 UDAT_STANDALONE_SHORT_MONTHS,
01454 UDAT_STANDALONE_NARROW_MONTHS,
01456 UDAT_STANDALONE_WEEKDAYS,
01461 UDAT_STANDALONE_SHORT_WEEKDAYS,
01463 UDAT_STANDALONE_NARROW_WEEKDAYS,
01465 UDAT_QUARTERS,
01467 UDAT_SHORT_QUARTERS,
01469 UDAT_STANDALONE_QUARTERS,
01470 UDAT_STANDALONE_SHORT_QUARTERS,
01478 UDAT_SHORTER_WEEKDAYS,
01483 UDAT_STANDALONE_SHORTER_WEEKDAYS,
01489 UDAT_CYCLIC_YEARS_WIDE,
01494 UDAT_CYCLIC_YEARS_ABBREVIATED,
01500 UDAT_CYCLIC_YEARS_NARROW,
01506 UDAT_ZODIAC_NAMES_WIDE,
01511 UDAT_ZODIAC_NAMES_ABBREVIATED,
01517 UDAT_ZODIAC_NAMES_NARROW
01518 } UDateFormatSymbolType;
01519
01520 struct UDateFormatSymbols;
01525 typedef struct UDateFormatSymbols UDateFormatSymbols;
01526
01543 U_CAPI int32_t U_EXPORT2
01544 udat_getSymbols(const UDateFormat *fmt,
01545 UDateFormatSymbolType type,
01546 int32_t symbolIndex,
01547 UChar *result,
01548 int32_t resultLength,
01549 UErrorCode *status);
01550
01563 U_CAPI int32_t U_EXPORT2
01564 udat_countSymbols( const UDateFormat *fmt,
01565 UDateFormatSymbolType type);
01566
01582 U_CAPI void U_EXPORT2
01583 udat_setSymbols( UDateFormat *format,
01584 UDateFormatSymbolType type,
01585 int32_t symbolIndex,
01586 UChar *value,
01587 int32_t valueLength,
01588 UErrorCode *status);
01589
01599 U_CAPI const char* U_EXPORT2
01600 udat_getLocaleByType(const UDateFormat *fmt,
01601 ULocDataLocaleType type,
01602 UErrorCode* status);
01603
01612 U_CAPI void U_EXPORT2
01613 udat_setContext(UDateFormat* fmt, UDisplayContext value, UErrorCode* status);
01614
01624 U_CAPI UDisplayContext U_EXPORT2
01625 udat_getContext(const UDateFormat* fmt, UDisplayContextType type, UErrorCode* status);
01626
01627 #ifndef U_HIDE_INTERNAL_API
01628
01639 U_INTERNAL int32_t U_EXPORT2
01640 udat_toPatternRelativeDate(const UDateFormat *fmt,
01641 UChar *result,
01642 int32_t resultLength,
01643 UErrorCode *status);
01644
01656 U_INTERNAL int32_t U_EXPORT2
01657 udat_toPatternRelativeTime(const UDateFormat *fmt,
01658 UChar *result,
01659 int32_t resultLength,
01660 UErrorCode *status);
01661
01674 U_INTERNAL void U_EXPORT2
01675 udat_applyPatternRelative(UDateFormat *format,
01676 const UChar *datePattern,
01677 int32_t datePatternLength,
01678 const UChar *timePattern,
01679 int32_t timePatternLength,
01680 UErrorCode *status);
01681
01686 typedef UDateFormat* (U_EXPORT2 *UDateFormatOpener) (UDateFormatStyle timeStyle,
01687 UDateFormatStyle dateStyle,
01688 const char *locale,
01689 const UChar *tzID,
01690 int32_t tzIDLength,
01691 const UChar *pattern,
01692 int32_t patternLength,
01693 UErrorCode *status);
01694
01699 U_INTERNAL void U_EXPORT2
01700 udat_registerOpener(UDateFormatOpener opener, UErrorCode *status);
01701
01706 U_INTERNAL UDateFormatOpener U_EXPORT2
01707 udat_unregisterOpener(UDateFormatOpener opener, UErrorCode *status);
01708 #endif
01709
01710
01711 #endif
01712
01713 #endif