ICU 78.3  78.3
reldatefmt.h
Go to the documentation of this file.
1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /*
4 *****************************************************************************
5 * Copyright (C) 2014-2016, International Business Machines Corporation and
6 * others.
7 * All Rights Reserved.
8 *****************************************************************************
9 *
10 * File RELDATEFMT.H
11 *****************************************************************************
12 */
13 
14 #ifndef __RELDATEFMT_H
15 #define __RELDATEFMT_H
16 
17 #include "unicode/utypes.h"
18 
19 #if U_SHOW_CPLUSPLUS_API
20 
21 #include "unicode/uobject.h"
23 #include "unicode/ureldatefmt.h"
24 #include "unicode/locid.h"
25 #include "unicode/formattedvalue.h"
26 
32 #if !UCONFIG_NO_FORMATTING
33 
39 typedef enum UDateRelativeUnit {
40 
46 
52 
58 
64 
70 
76 
82 
83 #ifndef U_HIDE_DEPRECATED_API
84 
89 #endif // U_HIDE_DEPRECATED_API
91 
96 typedef enum UDateAbsoluteUnit {
97 
98  // Days of week have to remain together and in order from Sunday to
99  // Saturday.
105 
111 
117 
123 
129 
135 
141 
147 
153 
159 
165 
171 
177 
183 
189 
190 #ifndef U_HIDE_DEPRECATED_API
191 
196 #endif // U_HIDE_DEPRECATED_API
198 
204 typedef enum UDateDirection {
205 
211 
217 
223 
229 
235 
241 
242 #ifndef U_HIDE_DEPRECATED_API
243 
248 #endif // U_HIDE_DEPRECATED_API
250 
251 U_NAMESPACE_BEGIN
252 
253 class BreakIterator;
254 class RelativeDateTimeCacheData;
255 class SharedNumberFormat;
256 class SharedPluralRules;
257 class SharedBreakIterator;
258 class NumberFormat;
259 class UnicodeString;
260 class FormattedRelativeDateTime;
261 class FormattedRelativeDateTimeData;
262 
273  public:
278  FormattedRelativeDateTime() : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {}
279 
285 
290  virtual ~FormattedRelativeDateTime() override;
291 
294 
296  FormattedRelativeDateTime& operator=(const FormattedRelativeDateTime&) = delete;
297 
302  FormattedRelativeDateTime& operator=(FormattedRelativeDateTime&& src) noexcept;
303 
305  UnicodeString toString(UErrorCode& status) const override;
306 
308  UnicodeString toTempString(UErrorCode& status) const override;
309 
311  Appendable &appendTo(Appendable& appendable, UErrorCode& status) const override;
312 
314  UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const override;
315 
316  private:
317  FormattedRelativeDateTimeData *fData;
318  UErrorCode fErrorCode;
319  explicit FormattedRelativeDateTime(FormattedRelativeDateTimeData *results)
320  : fData(results), fErrorCode(U_ZERO_ERROR) {}
321  explicit FormattedRelativeDateTime(UErrorCode errorCode)
322  : fData(nullptr), fErrorCode(errorCode) {}
323  friend class RelativeDateTimeFormatter;
324 };
325 
397 public:
398 
404 
409  U_I18N_API RelativeDateTimeFormatter(const Locale& locale, UErrorCode& status);
410 
422  const Locale& locale, NumberFormat *nfToAdopt, UErrorCode& status);
423 
440  const Locale& locale,
441  NumberFormat *nfToAdopt,
443  UDisplayContext capitalizationContext,
444  UErrorCode& status);
445 
451 
457  const RelativeDateTimeFormatter& other);
458 
464 
484  U_I18N_API UnicodeString& format(
485  double quantity,
486  UDateDirection direction,
487  UDateRelativeUnit unit,
488  UnicodeString& appendTo,
489  UErrorCode& status) const;
490 
509  double quantity,
510  UDateDirection direction,
511  UDateRelativeUnit unit,
512  UErrorCode& status) const;
513 
530  U_I18N_API UnicodeString& format(
531  UDateDirection direction,
532  UDateAbsoluteUnit unit,
533  UnicodeString& appendTo,
534  UErrorCode& status) const;
535 
552  UDateDirection direction,
553  UDateAbsoluteUnit unit,
554  UErrorCode& status) const;
555 
576  U_I18N_API UnicodeString& formatNumeric(
577  double offset,
579  UnicodeString& appendTo,
580  UErrorCode& status) const;
581 
600  U_I18N_API FormattedRelativeDateTime formatNumericToValue(
601  double offset,
603  UErrorCode& status) const;
604 
625  U_I18N_API UnicodeString& format(
626  double offset,
628  UnicodeString& appendTo,
629  UErrorCode& status) const;
630 
650  double offset,
652  UErrorCode& status) const;
653 
666  U_I18N_API UnicodeString& combineDateAndTime(
667  const UnicodeString& relativeDateString,
668  const UnicodeString& timeString,
669  UnicodeString& appendTo,
670  UErrorCode& status) const;
671 
677  U_I18N_API const NumberFormat& getNumberFormat() const;
678 
684  U_I18N_API UDisplayContext getCapitalizationContext() const;
685 
691  U_I18N_API UDateRelativeDateTimeFormatterStyle getFormatStyle() const;
692 
693 private:
694  const RelativeDateTimeCacheData* fCache;
695  const SharedNumberFormat *fNumberFormat;
696  const SharedPluralRules *fPluralRules;
698  UDisplayContext fContext;
699 #if !UCONFIG_NO_BREAK_ITERATION
700  const SharedBreakIterator *fOptBreakIterator;
701 #else
702  std::nullptr_t fOptBreakIterator = nullptr;
703 #endif // !UCONFIG_NO_BREAK_ITERATION
704  Locale fLocale;
705  void init(
706  NumberFormat *nfToAdopt,
708  BreakIterator *brkIter,
709 #else
710  std::nullptr_t,
711 #endif // !UCONFIG_NO_BREAK_ITERATION
712  UErrorCode &status);
713  UnicodeString& adjustForContext(UnicodeString &) const;
714  UBool checkNoAdjustForContext(UErrorCode& status) const;
715 
716  template<typename F, typename... Args>
717  UnicodeString& doFormat(
718  F callback,
719  UnicodeString& appendTo,
720  UErrorCode& status,
721  Args... args) const;
722 
723  template<typename F, typename... Args>
724  FormattedRelativeDateTime doFormatToValue(
725  F callback,
726  UErrorCode& status,
727  Args... args) const;
728 
729  void formatImpl(
730  double quantity,
731  UDateDirection direction,
732  UDateRelativeUnit unit,
733  FormattedRelativeDateTimeData& output,
734  UErrorCode& status) const;
735  void formatAbsoluteImpl(
736  UDateDirection direction,
737  UDateAbsoluteUnit unit,
738  FormattedRelativeDateTimeData& output,
739  UErrorCode& status) const;
740  void formatNumericImpl(
741  double offset,
743  FormattedRelativeDateTimeData& output,
744  UErrorCode& status) const;
745  void formatRelativeImpl(
746  double offset,
748  FormattedRelativeDateTimeData& output,
749  UErrorCode& status) const;
750 };
751 
752 U_NAMESPACE_END
753 
754 #endif /* !UCONFIG_NO_FORMATTING */
755 
756 #endif /* U_SHOW_CPLUSPLUS_API */
757 
758 #endif /* __RELDATEFMT_H */
UDAT_ABSOLUTE_WEDNESDAY
@ UDAT_ABSOLUTE_WEDNESDAY
Wednesday.
Definition: reldatefmt.h:122
UDAT_DIRECTION_LAST
@ UDAT_DIRECTION_LAST
Last.
Definition: reldatefmt.h:216
UDAT_RELATIVE_SECONDS
@ UDAT_RELATIVE_SECONDS
Seconds.
Definition: reldatefmt.h:45
icu::BreakIterator
The BreakIterator class implements methods for finding the location of boundaries in text.
Definition: brkiter.h:106
U_I18N_API_CLASS
#define U_I18N_API_CLASS
Definition: utypes.h:457
icu::NumberFormat
Definition: numfmt.h:175
icu::RelativeDateTimeFormatter
Formats simple relative dates.
Definition: reldatefmt.h:396
UDAT_RELATIVE_MONTHS
@ UDAT_RELATIVE_MONTHS
Months.
Definition: reldatefmt.h:75
UDAT_ABSOLUTE_TUESDAY
@ UDAT_ABSOLUTE_TUESDAY
Tuesday.
Definition: reldatefmt.h:116
utypes.h
Basic definitions for ICU, for both C and C++ APIs.
UDAT_RELATIVE_MINUTES
@ UDAT_RELATIVE_MINUTES
Minutes.
Definition: reldatefmt.h:51
UDAT_ABSOLUTE_MINUTE
@ UDAT_ABSOLUTE_MINUTE
Minute.
Definition: reldatefmt.h:188
U_I18N_API
#define U_I18N_API
Definition: utypes.h:316
UBool
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:269
icu::FormattedRelativeDateTime::FormattedRelativeDateTime
FormattedRelativeDateTime()
Default constructor; makes an empty FormattedRelativeDateTime.
Definition: reldatefmt.h:278
icu::FormattedValue
An abstract formatted value: a string with associated field attributes.
Definition: formattedvalue.h:241
URelativeDateTimeUnit
URelativeDateTimeUnit
Represents the unit for formatting a relative date.
Definition: ureldatefmt.h:81
UCONFIG_NO_BREAK_ITERATION
#define UCONFIG_NO_BREAK_ITERATION
Definition: uconfig.h:358
UDAT_ABSOLUTE_YEAR
@ UDAT_ABSOLUTE_YEAR
Year.
Definition: reldatefmt.h:164
UDAT_RELATIVE_YEARS
@ UDAT_RELATIVE_YEARS
Years.
Definition: reldatefmt.h:81
UDAT_RELATIVE_HOURS
@ UDAT_RELATIVE_HOURS
Hours.
Definition: reldatefmt.h:57
UDAT_DIRECTION_COUNT
@ UDAT_DIRECTION_COUNT
One more than the highest normal UDateDirection value.
Definition: reldatefmt.h:247
UDAT_ABSOLUTE_QUARTER
@ UDAT_ABSOLUTE_QUARTER
Quarter.
Definition: reldatefmt.h:176
UDAT_ABSOLUTE_MONDAY
@ UDAT_ABSOLUTE_MONDAY
Monday.
Definition: reldatefmt.h:110
UDAT_ABSOLUTE_WEEK
@ UDAT_ABSOLUTE_WEEK
Week.
Definition: reldatefmt.h:152
UDAT_RELATIVE_DAYS
@ UDAT_RELATIVE_DAYS
Days.
Definition: reldatefmt.h:63
UDAT_ABSOLUTE_FRIDAY
@ UDAT_ABSOLUTE_FRIDAY
Friday.
Definition: reldatefmt.h:134
icu::UnicodeString
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:302
ureldatefmt.h
C API: URelativeDateTimeFormatter, relative date formatting of unit + numeric offset.
UDateDirection
UDateDirection
Represents a direction for an absolute unit e.g "Next Tuesday" or "Last Tuesday".
Definition: reldatefmt.h:204
icu::UObject
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:222
UErrorCode
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:509
icu::FormattedValue::appendTo
virtual Appendable & appendTo(Appendable &appendable, UErrorCode &status) const =0
Appends the formatted string to an Appendable.
icu::UMemory
UMemory is the common ICU base class.
Definition: uobject.h:115
UDAT_ABSOLUTE_DAY
@ UDAT_ABSOLUTE_DAY
Day.
Definition: reldatefmt.h:146
UDAT_DIRECTION_THIS
@ UDAT_DIRECTION_THIS
This.
Definition: reldatefmt.h:222
icu::FormattedRelativeDateTime
An immutable class containing the result of a relative datetime formatting operation.
Definition: reldatefmt.h:272
UDAT_ABSOLUTE_SUNDAY
@ UDAT_ABSOLUTE_SUNDAY
Sunday.
Definition: reldatefmt.h:104
UDAT_DIRECTION_PLAIN
@ UDAT_DIRECTION_PLAIN
Plain, which means the absence of a qualifier.
Definition: reldatefmt.h:240
U_ZERO_ERROR
@ U_ZERO_ERROR
No error, no warning.
Definition: utypes.h:544
formattedvalue.h
C++ API: Abstract operations for localized strings.
UDAT_ABSOLUTE_SATURDAY
@ UDAT_ABSOLUTE_SATURDAY
Saturday.
Definition: reldatefmt.h:140
UDAT_RELATIVE_UNIT_COUNT
@ UDAT_RELATIVE_UNIT_COUNT
One more than the highest normal UDateRelativeUnit value.
Definition: reldatefmt.h:88
icu::Appendable
Base class for objects to which Unicode characters and strings can be appended.
Definition: appendable.h:54
UDAT_ABSOLUTE_HOUR
@ UDAT_ABSOLUTE_HOUR
Hour.
Definition: reldatefmt.h:182
UDAT_RELATIVE_WEEKS
@ UDAT_RELATIVE_WEEKS
Weeks.
Definition: reldatefmt.h:69
icu::FormattedValue::toString
virtual UnicodeString toString(UErrorCode &status) const =0
Returns the formatted string as a self-contained UnicodeString.
UDisplayContext
UDisplayContext
Display context settings.
Definition: udisplaycontext.h:64
UDAT_ABSOLUTE_MONTH
@ UDAT_ABSOLUTE_MONTH
Month.
Definition: reldatefmt.h:158
UDAT_DIRECTION_LAST_2
@ UDAT_DIRECTION_LAST_2
Two before.
Definition: reldatefmt.h:210
UDateAbsoluteUnit
UDateAbsoluteUnit
Represents an absolute unit.
Definition: reldatefmt.h:96
UDAT_DIRECTION_NEXT
@ UDAT_DIRECTION_NEXT
Next.
Definition: reldatefmt.h:228
UDAT_ABSOLUTE_UNIT_COUNT
@ UDAT_ABSOLUTE_UNIT_COUNT
One more than the highest normal UDateAbsoluteUnit value.
Definition: reldatefmt.h:195
udisplaycontext.h
C API: Display context types (enum values)
locid.h
C++ API: Locale ID object.
UDateRelativeDateTimeFormatterStyle
UDateRelativeDateTimeFormatterStyle
The formatting style.
Definition: ureldatefmt.h:48
UDateRelativeUnit
UDateRelativeUnit
Represents the unit for formatting a relative date.
Definition: reldatefmt.h:39
uobject.h
C++ API: Common ICU base class UObject.
U_INVALID_STATE_ERROR
@ U_INVALID_STATE_ERROR
Requested operation can not be completed with ICU in its current state.
Definition: utypes.h:573
UDAT_ABSOLUTE_NOW
@ UDAT_ABSOLUTE_NOW
Now.
Definition: reldatefmt.h:170
icu::FormattedValue::nextPosition
virtual UBool nextPosition(ConstrainedFieldPosition &cfpos, UErrorCode &status) const =0
Iterates over field positions in the FormattedValue.
icu::Locale
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:198
icu::FormattedValue::toTempString
virtual UnicodeString toTempString(UErrorCode &status) const =0
Returns the formatted string as a read-only alias to memory owned by the FormattedValue.
icu::ConstrainedFieldPosition
Represents a span of a string containing a given field.
Definition: formattedvalue.h:41
UDAT_DIRECTION_NEXT_2
@ UDAT_DIRECTION_NEXT_2
Two after.
Definition: reldatefmt.h:234
UDAT_ABSOLUTE_THURSDAY
@ UDAT_ABSOLUTE_THURSDAY
Thursday.
Definition: reldatefmt.h:128