ICU 75.1  75.1
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
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
196 #endif // U_HIDE_DEPRECATED_API
198 
204 typedef enum UDateDirection {
205 
211 
217 
223 
229 
235 
241 
242 #ifndef U_HIDE_DEPRECATED_API
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 
297 
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 
395 public:
396 
402 
407  RelativeDateTimeFormatter(const Locale& locale, UErrorCode& status);
408 
420  const Locale& locale, NumberFormat *nfToAdopt, UErrorCode& status);
421 
438  const Locale& locale,
439  NumberFormat *nfToAdopt,
441  UDisplayContext capitalizationContext,
442  UErrorCode& status);
443 
449 
455  const RelativeDateTimeFormatter& other);
456 
462 
483  double quantity,
484  UDateDirection direction,
485  UDateRelativeUnit unit,
486  UnicodeString& appendTo,
487  UErrorCode& status) const;
488 
507  double quantity,
508  UDateDirection direction,
509  UDateRelativeUnit unit,
510  UErrorCode& status) const;
511 
529  UDateDirection direction,
530  UDateAbsoluteUnit unit,
531  UnicodeString& appendTo,
532  UErrorCode& status) const;
533 
550  UDateDirection direction,
551  UDateAbsoluteUnit unit,
552  UErrorCode& status) const;
553 
575  double offset,
577  UnicodeString& appendTo,
578  UErrorCode& status) const;
579 
599  double offset,
601  UErrorCode& status) const;
602 
624  double offset,
626  UnicodeString& appendTo,
627  UErrorCode& status) const;
628 
648  double offset,
650  UErrorCode& status) const;
651 
665  const UnicodeString& relativeDateString,
666  const UnicodeString& timeString,
667  UnicodeString& appendTo,
668  UErrorCode& status) const;
669 
676 
683 
690 
691 private:
692  const RelativeDateTimeCacheData* fCache;
693  const SharedNumberFormat *fNumberFormat;
694  const SharedPluralRules *fPluralRules;
696  UDisplayContext fContext;
697 #if !UCONFIG_NO_BREAK_ITERATION
698  const SharedBreakIterator *fOptBreakIterator;
699 #else
700  std::nullptr_t fOptBreakIterator = nullptr;
701 #endif // !UCONFIG_NO_BREAK_ITERATION
702  Locale fLocale;
703  void init(
704  NumberFormat *nfToAdopt,
706  BreakIterator *brkIter,
707 #else
708  std::nullptr_t,
709 #endif // !UCONFIG_NO_BREAK_ITERATION
710  UErrorCode &status);
711  UnicodeString& adjustForContext(UnicodeString &) const;
712  UBool checkNoAdjustForContext(UErrorCode& status) const;
713 
714  template<typename F, typename... Args>
715  UnicodeString& doFormat(
716  F callback,
717  UnicodeString& appendTo,
718  UErrorCode& status,
719  Args... args) const;
720 
721  template<typename F, typename... Args>
722  FormattedRelativeDateTime doFormatToValue(
723  F callback,
724  UErrorCode& status,
725  Args... args) const;
726 
727  void formatImpl(
728  double quantity,
729  UDateDirection direction,
730  UDateRelativeUnit unit,
731  FormattedRelativeDateTimeData& output,
732  UErrorCode& status) const;
733  void formatAbsoluteImpl(
734  UDateDirection direction,
735  UDateAbsoluteUnit unit,
736  FormattedRelativeDateTimeData& output,
737  UErrorCode& status) const;
738  void formatNumericImpl(
739  double offset,
741  FormattedRelativeDateTimeData& output,
742  UErrorCode& status) const;
743  void formatRelativeImpl(
744  double offset,
746  FormattedRelativeDateTimeData& output,
747  UErrorCode& status) const;
748 };
749 
750 U_NAMESPACE_END
751 
752 #endif /* !UCONFIG_NO_FORMATTING */
753 
754 #endif /* U_SHOW_CPLUSPLUS_API */
755 
756 #endif /* __RELDATEFMT_H */
Base class for objects to which Unicode characters and strings can be appended.
Definition: appendable.h:54
The BreakIterator class implements methods for finding the location of boundaries in text.
Definition: brkiter.h:106
Represents a span of a string containing a given field.
An immutable class containing the result of a relative datetime formatting operation.
Definition: reldatefmt.h:272
FormattedRelativeDateTime & operator=(const FormattedRelativeDateTime &)=delete
Copying not supported; use move assignment instead.
FormattedRelativeDateTime(FormattedRelativeDateTime &&src) noexcept
Move constructor: Leaves the source FormattedRelativeDateTime in an undefined state.
FormattedRelativeDateTime & operator=(FormattedRelativeDateTime &&src) noexcept
Move assignment: Leaves the source FormattedRelativeDateTime in an undefined state.
FormattedRelativeDateTime()
Default constructor; makes an empty FormattedRelativeDateTime.
Definition: reldatefmt.h:278
Appendable & appendTo(Appendable &appendable, UErrorCode &status) const override
Appends the formatted string to an Appendable.
UnicodeString toString(UErrorCode &status) const override
Returns the formatted string as a self-contained UnicodeString.
UBool nextPosition(ConstrainedFieldPosition &cfpos, UErrorCode &status) const override
Iterates over field positions in the FormattedValue.
virtual ~FormattedRelativeDateTime() override
Destruct an instance of FormattedRelativeDateTime.
UnicodeString toTempString(UErrorCode &status) const override
Returns the formatted string as a read-only alias to memory owned by the FormattedValue.
FormattedRelativeDateTime(const FormattedRelativeDateTime &)=delete
Copying not supported; use move constructor instead.
An abstract formatted value: a string with associated field attributes.
A Locale object represents a specific geographical, political, or cultural region.
Definition: locid.h:195
Formats simple relative dates.
Definition: reldatefmt.h:394
virtual ~RelativeDateTimeFormatter()
Destructor.
FormattedRelativeDateTime formatNumericToValue(double offset, URelativeDateTimeUnit unit, UErrorCode &status) const
Format a combination of URelativeDateTimeUnit and numeric offset using a numeric style,...
UnicodeString & format(UDateDirection direction, UDateAbsoluteUnit unit, UnicodeString &appendTo, UErrorCode &status) const
Formats a relative date without a quantity.
UDateRelativeDateTimeFormatterStyle getFormatStyle() const
Returns the format style.
UnicodeString & format(double offset, URelativeDateTimeUnit unit, UnicodeString &appendTo, UErrorCode &status) const
Format a combination of URelativeDateTimeUnit and numeric offset using a text style if possible,...
const NumberFormat & getNumberFormat() const
Returns the NumberFormat this object is using.
FormattedRelativeDateTime formatToValue(double quantity, UDateDirection direction, UDateRelativeUnit unit, UErrorCode &status) const
Formats a relative date with a quantity such as "in 5 days" or "3 months ago".
RelativeDateTimeFormatter(UErrorCode &status)
Create RelativeDateTimeFormatter with default locale.
RelativeDateTimeFormatter(const Locale &locale, NumberFormat *nfToAdopt, UDateRelativeDateTimeFormatterStyle style, UDisplayContext capitalizationContext, UErrorCode &status)
Create RelativeDateTimeFormatter with given locale, NumberFormat, and capitalization context.
RelativeDateTimeFormatter & operator=(const RelativeDateTimeFormatter &other)
Assignment operator.
UnicodeString & combineDateAndTime(const UnicodeString &relativeDateString, const UnicodeString &timeString, UnicodeString &appendTo, UErrorCode &status) const
Combines a relative date string and a time string in this object's locale.
RelativeDateTimeFormatter(const Locale &locale, NumberFormat *nfToAdopt, UErrorCode &status)
Create RelativeDateTimeFormatter with given locale and NumberFormat.
UnicodeString & formatNumeric(double offset, URelativeDateTimeUnit unit, UnicodeString &appendTo, UErrorCode &status) const
Format a combination of URelativeDateTimeUnit and numeric offset using a numeric style,...
RelativeDateTimeFormatter(const RelativeDateTimeFormatter &other)
Copy constructor.
FormattedRelativeDateTime formatToValue(double offset, URelativeDateTimeUnit unit, UErrorCode &status) const
Format a combination of URelativeDateTimeUnit and numeric offset using a text style if possible,...
UDisplayContext getCapitalizationContext() const
Returns the capitalization context.
UnicodeString & format(double quantity, UDateDirection direction, UDateRelativeUnit unit, UnicodeString &appendTo, UErrorCode &status) const
Formats a relative date with a quantity such as "in 5 days" or "3 months ago".
RelativeDateTimeFormatter(const Locale &locale, UErrorCode &status)
Create RelativeDateTimeFormatter with given locale.
FormattedRelativeDateTime formatToValue(UDateDirection direction, UDateAbsoluteUnit unit, UErrorCode &status) const
Formats a relative date without a quantity.
UMemory is the common ICU base class.
Definition: uobject.h:115
UObject is the common ICU "boilerplate" class.
Definition: uobject.h:223
UnicodeString is a string class that stores Unicode characters directly and provides similar function...
Definition: unistr.h:296
C++ API: Abstract operations for localized strings.
C++ API: Locale ID object.
UDateAbsoluteUnit
Represents an absolute unit.
Definition: reldatefmt.h:96
@ UDAT_ABSOLUTE_DAY
Day.
Definition: reldatefmt.h:146
@ UDAT_ABSOLUTE_FRIDAY
Friday.
Definition: reldatefmt.h:134
@ UDAT_ABSOLUTE_YEAR
Year.
Definition: reldatefmt.h:164
@ UDAT_ABSOLUTE_WEDNESDAY
Wednesday.
Definition: reldatefmt.h:122
@ UDAT_ABSOLUTE_HOUR
Hour.
Definition: reldatefmt.h:182
@ UDAT_ABSOLUTE_WEEK
Week.
Definition: reldatefmt.h:152
@ UDAT_ABSOLUTE_NOW
Now.
Definition: reldatefmt.h:170
@ UDAT_ABSOLUTE_MINUTE
Minute.
Definition: reldatefmt.h:188
@ UDAT_ABSOLUTE_THURSDAY
Thursday.
Definition: reldatefmt.h:128
@ UDAT_ABSOLUTE_TUESDAY
Tuesday.
Definition: reldatefmt.h:116
@ UDAT_ABSOLUTE_MONTH
Month.
Definition: reldatefmt.h:158
@ UDAT_ABSOLUTE_SUNDAY
Sunday.
Definition: reldatefmt.h:104
@ UDAT_ABSOLUTE_UNIT_COUNT
One more than the highest normal UDateAbsoluteUnit value.
Definition: reldatefmt.h:195
@ UDAT_ABSOLUTE_MONDAY
Monday.
Definition: reldatefmt.h:110
@ UDAT_ABSOLUTE_SATURDAY
Saturday.
Definition: reldatefmt.h:140
@ UDAT_ABSOLUTE_QUARTER
Quarter.
Definition: reldatefmt.h:176
UDateRelativeUnit
Represents the unit for formatting a relative date.
Definition: reldatefmt.h:39
@ UDAT_RELATIVE_DAYS
Days.
Definition: reldatefmt.h:63
@ UDAT_RELATIVE_UNIT_COUNT
One more than the highest normal UDateRelativeUnit value.
Definition: reldatefmt.h:88
@ UDAT_RELATIVE_HOURS
Hours.
Definition: reldatefmt.h:57
@ UDAT_RELATIVE_MONTHS
Months.
Definition: reldatefmt.h:75
@ UDAT_RELATIVE_WEEKS
Weeks.
Definition: reldatefmt.h:69
@ UDAT_RELATIVE_YEARS
Years.
Definition: reldatefmt.h:81
@ UDAT_RELATIVE_MINUTES
Minutes.
Definition: reldatefmt.h:51
@ UDAT_RELATIVE_SECONDS
Seconds.
Definition: reldatefmt.h:45
UDateDirection
Represents a direction for an absolute unit e.g "Next Tuesday" or "Last Tuesday".
Definition: reldatefmt.h:204
@ UDAT_DIRECTION_PLAIN
Plain, which means the absence of a qualifier.
Definition: reldatefmt.h:240
@ UDAT_DIRECTION_THIS
This.
Definition: reldatefmt.h:222
@ UDAT_DIRECTION_LAST_2
Two before.
Definition: reldatefmt.h:210
@ UDAT_DIRECTION_LAST
Last.
Definition: reldatefmt.h:216
@ UDAT_DIRECTION_NEXT
Next.
Definition: reldatefmt.h:228
@ UDAT_DIRECTION_NEXT_2
Two after.
Definition: reldatefmt.h:234
@ UDAT_DIRECTION_COUNT
One more than the highest normal UDateDirection value.
Definition: reldatefmt.h:247
#define UCONFIG_NO_BREAK_ITERATION
This switch turns off break iteration.
Definition: uconfig.h:358
C API: Display context types (enum values)
UDisplayContext
Display context settings.
int8_t UBool
The ICU boolean type, a signed-byte integer.
Definition: umachine.h:247
C++ API: Common ICU base class UObject.
C API: URelativeDateTimeFormatter, relative date formatting of unit + numeric offset.
UDateRelativeDateTimeFormatterStyle
The formatting style.
Definition: ureldatefmt.h:48
URelativeDateTimeUnit
Represents the unit for formatting a relative date.
Definition: ureldatefmt.h:81
Basic definitions for ICU, for both C and C++ APIs.
UErrorCode
Standard ICU4C error code type, a substitute for exceptions.
Definition: utypes.h:415
@ U_INVALID_STATE_ERROR
Requested operation can not be completed with ICU in its current state.
Definition: utypes.h:479
@ U_ZERO_ERROR
No error, no warning.
Definition: utypes.h:450
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition: utypes.h:301