00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __RELDATEFMT_H
00013 #define __RELDATEFMT_H
00014
00015 #include "unicode/utypes.h"
00016 #include "unicode/uobject.h"
00017 #include "unicode/udisplaycontext.h"
00018 #include "unicode/ureldatefmt.h"
00019 #include "unicode/locid.h"
00020
00026 #if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION
00027
00033 typedef enum UDateRelativeUnit {
00034
00039 UDAT_RELATIVE_SECONDS,
00040
00045 UDAT_RELATIVE_MINUTES,
00046
00051 UDAT_RELATIVE_HOURS,
00052
00057 UDAT_RELATIVE_DAYS,
00058
00063 UDAT_RELATIVE_WEEKS,
00064
00069 UDAT_RELATIVE_MONTHS,
00070
00075 UDAT_RELATIVE_YEARS,
00076
00081 UDAT_RELATIVE_UNIT_COUNT
00082 } UDateRelativeUnit;
00083
00088 typedef enum UDateAbsoluteUnit {
00089
00090
00091
00096 UDAT_ABSOLUTE_SUNDAY,
00097
00102 UDAT_ABSOLUTE_MONDAY,
00103
00108 UDAT_ABSOLUTE_TUESDAY,
00109
00114 UDAT_ABSOLUTE_WEDNESDAY,
00115
00120 UDAT_ABSOLUTE_THURSDAY,
00121
00126 UDAT_ABSOLUTE_FRIDAY,
00127
00132 UDAT_ABSOLUTE_SATURDAY,
00133
00138 UDAT_ABSOLUTE_DAY,
00139
00144 UDAT_ABSOLUTE_WEEK,
00145
00150 UDAT_ABSOLUTE_MONTH,
00151
00156 UDAT_ABSOLUTE_YEAR,
00157
00162 UDAT_ABSOLUTE_NOW,
00163
00168 UDAT_ABSOLUTE_UNIT_COUNT
00169 } UDateAbsoluteUnit;
00170
00176 typedef enum UDateDirection {
00177
00182 UDAT_DIRECTION_LAST_2,
00183
00188 UDAT_DIRECTION_LAST,
00189
00194 UDAT_DIRECTION_THIS,
00195
00200 UDAT_DIRECTION_NEXT,
00201
00206 UDAT_DIRECTION_NEXT_2,
00207
00212 UDAT_DIRECTION_PLAIN,
00213
00218 UDAT_DIRECTION_COUNT
00219 } UDateDirection;
00220
00221
00222 U_NAMESPACE_BEGIN
00223
00224 class RelativeDateTimeCacheData;
00225 class SharedNumberFormat;
00226 class SharedPluralRules;
00227 class SharedBreakIterator;
00228 class NumberFormat;
00229 class UnicodeString;
00230
00299 class U_I18N_API RelativeDateTimeFormatter : public UObject {
00300 public:
00301
00306 RelativeDateTimeFormatter(UErrorCode& status);
00307
00312 RelativeDateTimeFormatter(const Locale& locale, UErrorCode& status);
00313
00324 RelativeDateTimeFormatter(
00325 const Locale& locale, NumberFormat *nfToAdopt, UErrorCode& status);
00326
00342 RelativeDateTimeFormatter(
00343 const Locale& locale,
00344 NumberFormat *nfToAdopt,
00345 UDateRelativeDateTimeFormatterStyle style,
00346 UDisplayContext capitalizationContext,
00347 UErrorCode& status);
00348
00353 RelativeDateTimeFormatter(const RelativeDateTimeFormatter& other);
00354
00359 RelativeDateTimeFormatter& operator=(
00360 const RelativeDateTimeFormatter& other);
00361
00366 virtual ~RelativeDateTimeFormatter();
00367
00383 UnicodeString& format(
00384 double quantity,
00385 UDateDirection direction,
00386 UDateRelativeUnit unit,
00387 UnicodeString& appendTo,
00388 UErrorCode& status) const;
00389
00402 UnicodeString& format(
00403 UDateDirection direction,
00404 UDateAbsoluteUnit unit,
00405 UnicodeString& appendTo,
00406 UErrorCode& status) const;
00407
00408 #ifndef U_HIDE_DRAFT_API
00409
00426 UnicodeString& formatNumeric(
00427 double offset,
00428 URelativeDateTimeUnit unit,
00429 UnicodeString& appendTo,
00430 UErrorCode& status) const;
00431
00449 UnicodeString& format(
00450 double offset,
00451 URelativeDateTimeUnit unit,
00452 UnicodeString& appendTo,
00453 UErrorCode& status) const;
00454 #endif
00455
00468 UnicodeString& combineDateAndTime(
00469 const UnicodeString& relativeDateString,
00470 const UnicodeString& timeString,
00471 UnicodeString& appendTo,
00472 UErrorCode& status) const;
00473
00479 const NumberFormat& getNumberFormat() const;
00480
00486 UDisplayContext getCapitalizationContext() const;
00487
00493 UDateRelativeDateTimeFormatterStyle getFormatStyle() const;
00494
00495 private:
00496 const RelativeDateTimeCacheData* fCache;
00497 const SharedNumberFormat *fNumberFormat;
00498 const SharedPluralRules *fPluralRules;
00499 UDateRelativeDateTimeFormatterStyle fStyle;
00500 UDisplayContext fContext;
00501 const SharedBreakIterator *fOptBreakIterator;
00502 Locale fLocale;
00503 void init(
00504 NumberFormat *nfToAdopt,
00505 BreakIterator *brkIter,
00506 UErrorCode &status);
00507 void adjustForContext(UnicodeString &) const;
00508 };
00509
00510 U_NAMESPACE_END
00511
00512 #endif
00513 #endif