ICU 66.1 66.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"
26
32#if !UCONFIG_NO_FORMATTING
33
39typedef enum UDateRelativeUnit {
40
46
52
58
64
70
76
82
83#ifndef U_HIDE_DEPRECATED_API
89#endif // U_HIDE_DEPRECATED_API
91
96typedef 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
178#ifndef U_HIDE_DRAFT_API
184
190#endif // U_HIDE_DRAFT_API
191
192#ifndef U_HIDE_DEPRECATED_API
198#endif // U_HIDE_DEPRECATED_API
200
206typedef enum UDateDirection {
207
213
219
225
231
237
243
244#ifndef U_HIDE_DEPRECATED_API
250#endif // U_HIDE_DEPRECATED_API
252
253#if !UCONFIG_NO_BREAK_ITERATION
254
255U_NAMESPACE_BEGIN
256
257class BreakIterator;
258class RelativeDateTimeCacheData;
259class SharedNumberFormat;
260class SharedPluralRules;
261class SharedBreakIterator;
262class NumberFormat;
263class UnicodeString;
264class FormattedRelativeDateTime;
265class FormattedRelativeDateTimeData;
266
267#ifndef U_HIDE_DRAFT_API
278 public:
283 FormattedRelativeDateTime() : fData(nullptr), fErrorCode(U_INVALID_STATE_ERROR) {}
284
290
296
299
302
308
310 UnicodeString toString(UErrorCode& status) const U_OVERRIDE;
311
313 UnicodeString toTempString(UErrorCode& status) const U_OVERRIDE;
314
316 Appendable &appendTo(Appendable& appendable, UErrorCode& status) const U_OVERRIDE;
317
319 UBool nextPosition(ConstrainedFieldPosition& cfpos, UErrorCode& status) const U_OVERRIDE;
320
321 private:
322 FormattedRelativeDateTimeData *fData;
323 UErrorCode fErrorCode;
324 explicit FormattedRelativeDateTime(FormattedRelativeDateTimeData *results)
325 : fData(results), fErrorCode(U_ZERO_ERROR) {}
326 explicit FormattedRelativeDateTime(UErrorCode errorCode)
327 : fData(nullptr), fErrorCode(errorCode) {}
328 friend class RelativeDateTimeFormatter;
329};
330#endif /* U_HIDE_DRAFT_API */
331
401public:
402
408
414
426 const Locale& locale, NumberFormat *nfToAdopt, UErrorCode& status);
427
444 const Locale& locale,
445 NumberFormat *nfToAdopt,
447 UDisplayContext capitalizationContext,
448 UErrorCode& status);
449
455
461 const RelativeDateTimeFormatter& other);
462
468
489 double quantity,
490 UDateDirection direction,
492 UnicodeString& appendTo,
493 UErrorCode& status) const;
494
495#ifndef U_HIDE_DRAFT_API
514 double quantity,
515 UDateDirection direction,
517 UErrorCode& status) const;
518#endif /* U_HIDE_DRAFT_API */
519
537 UDateDirection direction,
539 UnicodeString& appendTo,
540 UErrorCode& status) const;
541
542#ifndef U_HIDE_DRAFT_API
559 UDateDirection direction,
561 UErrorCode& status) const;
562#endif /* U_HIDE_DRAFT_API */
563
585 double offset,
587 UnicodeString& appendTo,
588 UErrorCode& status) const;
589
590#ifndef U_HIDE_DRAFT_API
610 double offset,
612 UErrorCode& status) const;
613#endif /* U_HIDE_DRAFT_API */
614
636 double offset,
638 UnicodeString& appendTo,
639 UErrorCode& status) const;
640
641#ifndef U_HIDE_DRAFT_API
661 double offset,
663 UErrorCode& status) const;
664#endif /* U_HIDE_DRAFT_API */
665
679 const UnicodeString& relativeDateString,
680 const UnicodeString& timeString,
681 UnicodeString& appendTo,
682 UErrorCode& status) const;
683
690
697
704
705private:
706 const RelativeDateTimeCacheData* fCache;
707 const SharedNumberFormat *fNumberFormat;
708 const SharedPluralRules *fPluralRules;
710 UDisplayContext fContext;
711 const SharedBreakIterator *fOptBreakIterator;
712 Locale fLocale;
713 void init(
714 NumberFormat *nfToAdopt,
715 BreakIterator *brkIter,
716 UErrorCode &status);
717 UnicodeString& adjustForContext(UnicodeString &) const;
718 UBool checkNoAdjustForContext(UErrorCode& status) const;
719
720 template<typename F, typename... Args>
721 UnicodeString& doFormat(
722 F callback,
723 UnicodeString& appendTo,
724 UErrorCode& status,
725 Args... args) const;
726
727#ifndef U_HIDE_DRAFT_API // for FormattedRelativeDateTime
728 template<typename F, typename... Args>
729 FormattedRelativeDateTime doFormatToValue(
730 F callback,
731 UErrorCode& status,
732 Args... args) const;
733#endif // U_HIDE_DRAFT_API
734
735 void formatImpl(
736 double quantity,
737 UDateDirection direction,
739 FormattedRelativeDateTimeData& output,
740 UErrorCode& status) const;
741 void formatAbsoluteImpl(
742 UDateDirection direction,
744 FormattedRelativeDateTimeData& output,
745 UErrorCode& status) const;
746 void formatNumericImpl(
747 double offset,
749 FormattedRelativeDateTimeData& output,
750 UErrorCode& status) const;
751 void formatRelativeImpl(
752 double offset,
754 FormattedRelativeDateTimeData& output,
755 UErrorCode& status) const;
756};
757
758U_NAMESPACE_END
759
760#endif /* !UCONFIG_NO_BREAK_ITERATION */
761#endif /* !UCONFIG_NO_FORMATTING */
762
763#endif /* U_SHOW_CPLUSPLUS_API */
764
765#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:277
FormattedRelativeDateTime()
Default constructor; makes an empty FormattedRelativeDateTime.
Definition: reldatefmt.h:283
virtual ~FormattedRelativeDateTime() U_OVERRIDE
Destruct an instance of FormattedRelativeDateTime.
FormattedRelativeDateTime(FormattedRelativeDateTime &&src) U_NOEXCEPT
Move constructor: Leaves the source FormattedRelativeDateTime in an undefined state.
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:400
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 & formatNumeric(double offset, URelativeDateTimeUnit unit, UnicodeString &appendTo, UErrorCode &status) const
Format a combination of URelativeDateTimeUnit and numeric offset using a numeric style,...
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,...
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.
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 & format(UDateDirection direction, UDateAbsoluteUnit unit, UnicodeString &appendTo, UErrorCode &status) const
Formats a relative date without a quantity.
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.
RelativeDateTimeFormatter & operator=(const RelativeDateTimeFormatter &other)
Assignment operator.
RelativeDateTimeFormatter(const Locale &locale, UErrorCode &status)
Create RelativeDateTimeFormatter with given locale.
const NumberFormat & getNumberFormat() const
Returns the NumberFormat this object is using.
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".
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:295
C++ API: Abstract operations for localized strings.
C++ API: Locale ID object.
#define U_NOEXCEPT
"noexcept" if supported, otherwise empty.
Definition: platform.h:529
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:183
@ UDAT_ABSOLUTE_WEEK
Week.
Definition: reldatefmt.h:152
@ UDAT_ABSOLUTE_NOW
Now.
Definition: reldatefmt.h:170
@ UDAT_ABSOLUTE_MINUTE
Minute.
Definition: reldatefmt.h:189
@ 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:197
@ 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:206
@ UDAT_DIRECTION_PLAIN
Plain, which means the absence of a qualifier.
Definition: reldatefmt.h:242
@ UDAT_DIRECTION_THIS
This.
Definition: reldatefmt.h:224
@ UDAT_DIRECTION_LAST_2
Two before.
Definition: reldatefmt.h:212
@ UDAT_DIRECTION_LAST
Last.
Definition: reldatefmt.h:218
@ UDAT_DIRECTION_NEXT
Next.
Definition: reldatefmt.h:230
@ UDAT_DIRECTION_NEXT_2
Two after.
Definition: reldatefmt.h:236
@ UDAT_DIRECTION_COUNT
One more than the highest normal UDateDirection value.
Definition: reldatefmt.h:249
C API: Display context types (enum values)
UDisplayContext
Display context settings.
int8_t UBool
The ICU boolean type.
Definition: umachine.h:261
#define U_OVERRIDE
Defined to the C++11 "override" keyword if available.
Definition: umachine.h:129
C++ API: Common ICU base class UObject.
C API: URelativeDateTimeFormatter, relative date formatting of unit + numeric offset.
UDateRelativeDateTimeFormatterStyle
The formatting style.
Definition: ureldatefmt.h:45
URelativeDateTimeUnit
Represents the unit for formatting a relative date.
Definition: ureldatefmt.h:78
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:478
@ U_ZERO_ERROR
No error, no warning.
Definition: utypes.h:449
#define U_I18N_API
Set to export library symbols from inside the i18n library, and to import them from outside.
Definition: utypes.h:301