00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __RELDATEFMT_H
00015 #define __RELDATEFMT_H
00016
00017 #include "unicode/utypes.h"
00018
00019 #if U_SHOW_CPLUSPLUS_API
00020
00021 #include "unicode/uobject.h"
00022 #include "unicode/udisplaycontext.h"
00023 #include "unicode/ureldatefmt.h"
00024 #include "unicode/locid.h"
00025 #include "unicode/formattedvalue.h"
00026
00032 #if !UCONFIG_NO_FORMATTING
00033
00039 typedef enum UDateRelativeUnit {
00040
00045 UDAT_RELATIVE_SECONDS,
00046
00051 UDAT_RELATIVE_MINUTES,
00052
00057 UDAT_RELATIVE_HOURS,
00058
00063 UDAT_RELATIVE_DAYS,
00064
00069 UDAT_RELATIVE_WEEKS,
00070
00075 UDAT_RELATIVE_MONTHS,
00076
00081 UDAT_RELATIVE_YEARS,
00082
00083 #ifndef U_HIDE_DEPRECATED_API
00084
00088 UDAT_RELATIVE_UNIT_COUNT
00089 #endif // U_HIDE_DEPRECATED_API
00090 } UDateRelativeUnit;
00091
00096 typedef enum UDateAbsoluteUnit {
00097
00098
00099
00104 UDAT_ABSOLUTE_SUNDAY,
00105
00110 UDAT_ABSOLUTE_MONDAY,
00111
00116 UDAT_ABSOLUTE_TUESDAY,
00117
00122 UDAT_ABSOLUTE_WEDNESDAY,
00123
00128 UDAT_ABSOLUTE_THURSDAY,
00129
00134 UDAT_ABSOLUTE_FRIDAY,
00135
00140 UDAT_ABSOLUTE_SATURDAY,
00141
00146 UDAT_ABSOLUTE_DAY,
00147
00152 UDAT_ABSOLUTE_WEEK,
00153
00158 UDAT_ABSOLUTE_MONTH,
00159
00164 UDAT_ABSOLUTE_YEAR,
00165
00170 UDAT_ABSOLUTE_NOW,
00171
00176 UDAT_ABSOLUTE_QUARTER,
00177
00178 #ifndef U_HIDE_DRAFT_API
00179
00183 UDAT_ABSOLUTE_HOUR,
00184
00189 UDAT_ABSOLUTE_MINUTE,
00190 #endif // U_HIDE_DRAFT_API
00191
00192 #ifndef U_HIDE_DEPRECATED_API
00193
00197 UDAT_ABSOLUTE_UNIT_COUNT = UDAT_ABSOLUTE_NOW + 4
00198 #endif // U_HIDE_DEPRECATED_API
00199 } UDateAbsoluteUnit;
00200
00206 typedef enum UDateDirection {
00207
00212 UDAT_DIRECTION_LAST_2,
00213
00218 UDAT_DIRECTION_LAST,
00219
00224 UDAT_DIRECTION_THIS,
00225
00230 UDAT_DIRECTION_NEXT,
00231
00236 UDAT_DIRECTION_NEXT_2,
00237
00242 UDAT_DIRECTION_PLAIN,
00243
00244 #ifndef U_HIDE_DEPRECATED_API
00245
00249 UDAT_DIRECTION_COUNT
00250 #endif // U_HIDE_DEPRECATED_API
00251 } UDateDirection;
00252
00253 #if !UCONFIG_NO_BREAK_ITERATION
00254
00255 U_NAMESPACE_BEGIN
00256
00257 class BreakIterator;
00258 class RelativeDateTimeCacheData;
00259 class SharedNumberFormat;
00260 class SharedPluralRules;
00261 class SharedBreakIterator;
00262 class NumberFormat;
00263 class UnicodeString;
00264 class FormattedRelativeDateTime;
00265 class FormattedRelativeDateTimeData;
00266
00267 #ifndef U_HIDE_DRAFT_API
00268
00277 class U_I18N_API FormattedRelativeDateTime : public UMemory, public FormattedValue {
00278 public:
00283 FormattedRelativeDateTime() : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {}
00284
00289 FormattedRelativeDateTime(FormattedRelativeDateTime&& src) U_NOEXCEPT;
00290
00295 virtual ~FormattedRelativeDateTime() U_OVERRIDE;
00296
00298 FormattedRelativeDateTime(const FormattedRelativeDateTime&) = delete;
00299
00301 FormattedRelativeDateTime& operator=(const FormattedRelativeDateTime&) = delete;
00302
00307 FormattedRelativeDateTime& operator=(FormattedRelativeDateTime&& src) U_NOEXCEPT;
00308
00310 UnicodeString toString(UErrorCode& status) const U_OVERRIDE;
00311
00313 UnicodeString toTempString(UErrorCode& status) const U_OVERRIDE;
00314
00316 Appendable &appendTo(Appendable& appendable, UErrorCode& status) const U_OVERRIDE;
00317
00319 UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const U_OVERRIDE;
00320
00321 private:
00322 FormattedRelativeDateTimeData *fData;
00323 UErrorCode fErrorCode;
00324 explicit FormattedRelativeDateTime(FormattedRelativeDateTimeData *results)
00325 : fData(results), fErrorCode(U_ZERO_ERROR) {}
00326 explicit FormattedRelativeDateTime(UErrorCode errorCode)
00327 : fData(nullptr), fErrorCode(errorCode) {}
00328 friend class RelativeDateTimeFormatter;
00329 };
00330 #endif
00331
00400 class U_I18N_API RelativeDateTimeFormatter : public UObject {
00401 public:
00402
00407 RelativeDateTimeFormatter(UErrorCode& status);
00408
00413 RelativeDateTimeFormatter(const Locale& locale, UErrorCode& status);
00414
00425 RelativeDateTimeFormatter(
00426 const Locale& locale, NumberFormat *nfToAdopt, UErrorCode& status);
00427
00443 RelativeDateTimeFormatter(
00444 const Locale& locale,
00445 NumberFormat *nfToAdopt,
00446 UDateRelativeDateTimeFormatterStyle style,
00447 UDisplayContext capitalizationContext,
00448 UErrorCode& status);
00449
00454 RelativeDateTimeFormatter(const RelativeDateTimeFormatter& other);
00455
00460 RelativeDateTimeFormatter& operator=(
00461 const RelativeDateTimeFormatter& other);
00462
00467 virtual ~RelativeDateTimeFormatter();
00468
00488 UnicodeString& format(
00489 double quantity,
00490 UDateDirection direction,
00491 UDateRelativeUnit unit,
00492 UnicodeString& appendTo,
00493 UErrorCode& status) const;
00494
00495 #ifndef U_HIDE_DRAFT_API
00496
00513 FormattedRelativeDateTime formatToValue(
00514 double quantity,
00515 UDateDirection direction,
00516 UDateRelativeUnit unit,
00517 UErrorCode& status) const;
00518 #endif
00519
00536 UnicodeString& format(
00537 UDateDirection direction,
00538 UDateAbsoluteUnit unit,
00539 UnicodeString& appendTo,
00540 UErrorCode& status) const;
00541
00542 #ifndef U_HIDE_DRAFT_API
00543
00558 FormattedRelativeDateTime formatToValue(
00559 UDateDirection direction,
00560 UDateAbsoluteUnit unit,
00561 UErrorCode& status) const;
00562 #endif
00563
00584 UnicodeString& formatNumeric(
00585 double offset,
00586 URelativeDateTimeUnit unit,
00587 UnicodeString& appendTo,
00588 UErrorCode& status) const;
00589
00590 #ifndef U_HIDE_DRAFT_API
00591
00609 FormattedRelativeDateTime formatNumericToValue(
00610 double offset,
00611 URelativeDateTimeUnit unit,
00612 UErrorCode& status) const;
00613 #endif
00614
00635 UnicodeString& format(
00636 double offset,
00637 URelativeDateTimeUnit unit,
00638 UnicodeString& appendTo,
00639 UErrorCode& status) const;
00640
00641 #ifndef U_HIDE_DRAFT_API
00642
00660 FormattedRelativeDateTime formatToValue(
00661 double offset,
00662 URelativeDateTimeUnit unit,
00663 UErrorCode& status) const;
00664 #endif
00665
00678 UnicodeString& combineDateAndTime(
00679 const UnicodeString& relativeDateString,
00680 const UnicodeString& timeString,
00681 UnicodeString& appendTo,
00682 UErrorCode& status) const;
00683
00689 const NumberFormat& getNumberFormat() const;
00690
00696 UDisplayContext getCapitalizationContext() const;
00697
00703 UDateRelativeDateTimeFormatterStyle getFormatStyle() const;
00704
00705 private:
00706 const RelativeDateTimeCacheData* fCache;
00707 const SharedNumberFormat *fNumberFormat;
00708 const SharedPluralRules *fPluralRules;
00709 UDateRelativeDateTimeFormatterStyle fStyle;
00710 UDisplayContext fContext;
00711 const SharedBreakIterator *fOptBreakIterator;
00712 Locale fLocale;
00713 void init(
00714 NumberFormat *nfToAdopt,
00715 BreakIterator *brkIter,
00716 UErrorCode &status);
00717 UnicodeString& adjustForContext(UnicodeString &) const;
00718 UBool checkNoAdjustForContext(UErrorCode& status) const;
00719
00720 template<typename F, typename... Args>
00721 UnicodeString& doFormat(
00722 F callback,
00723 UnicodeString& appendTo,
00724 UErrorCode& status,
00725 Args... args) const;
00726
00727 #ifndef U_HIDE_DRAFT_API // for FormattedRelativeDateTime
00728 template<typename F, typename... Args>
00729 FormattedRelativeDateTime doFormatToValue(
00730 F callback,
00731 UErrorCode& status,
00732 Args... args) const;
00733 #endif // U_HIDE_DRAFT_API
00734
00735 void formatImpl(
00736 double quantity,
00737 UDateDirection direction,
00738 UDateRelativeUnit unit,
00739 FormattedRelativeDateTimeData& output,
00740 UErrorCode& status) const;
00741 void formatAbsoluteImpl(
00742 UDateDirection direction,
00743 UDateAbsoluteUnit unit,
00744 FormattedRelativeDateTimeData& output,
00745 UErrorCode& status) const;
00746 void formatNumericImpl(
00747 double offset,
00748 URelativeDateTimeUnit unit,
00749 FormattedRelativeDateTimeData& output,
00750 UErrorCode& status) const;
00751 void formatRelativeImpl(
00752 double offset,
00753 URelativeDateTimeUnit unit,
00754 FormattedRelativeDateTimeData& output,
00755 UErrorCode& status) const;
00756 };
00757
00758 U_NAMESPACE_END
00759
00760 #endif
00761 #endif
00762
00763 #endif
00764
00765 #endif