public final class RelativeDateTimeFormatter extends Object
This API is very basic and is intended to be a building block for more fancy APIs. The caller tells it exactly what to display in a locale independent way. While this class automatically provides the correct plural forms, the grammatical form is otherwise as neutral as possible. It is the caller's responsibility to handle cut-off logic such as deciding between displaying "in 7 days" or "in 1 week." This API supports relative dates involving one single unit. This API does not support relative dates involving compound units. e.g "in 5 days and 4 hours" nor does it support parsing. This class is both immutable and thread-safe.
Here are some examples of use:
RelativeDateTimeFormatter fmt = RelativeDateTimeFormatter.getInstance(); fmt.format(1, Direction.NEXT, RelativeUnit.DAYS); // "in 1 day" fmt.format(3, Direction.NEXT, RelativeUnit.DAYS); // "in 3 days" fmt.format(3.2, Direction.LAST, RelativeUnit.YEARS); // "3.2 years ago" fmt.format(Direction.LAST, AbsoluteUnit.SUNDAY); // "last Sunday" fmt.format(Direction.THIS, AbsoluteUnit.SUNDAY); // "this Sunday" fmt.format(Direction.NEXT, AbsoluteUnit.SUNDAY); // "next Sunday" fmt.format(Direction.PLAIN, AbsoluteUnit.SUNDAY); // "Sunday" fmt.format(Direction.LAST, AbsoluteUnit.DAY); // "yesterday" fmt.format(Direction.THIS, AbsoluteUnit.DAY); // "today" fmt.format(Direction.NEXT, AbsoluteUnit.DAY); // "tomorrow" fmt.format(Direction.PLAIN, AbsoluteUnit.NOW); // "now"
The Style parameter allows selection of different length styles: LONG ("3 seconds ago"), SHORT ("3 sec. ago"), NARROW ("3s ago"). In the future, we may add more forms, such as relative day periods ("yesterday afternoon"), etc.
Modifier and Type | Class and Description |
---|---|
static class |
RelativeDateTimeFormatter.AbsoluteUnit
Represents an absolute unit.
|
static class |
RelativeDateTimeFormatter.Direction
Represents a direction for an absolute unit e.g "Next Tuesday"
or "Last Tuesday"
|
static class |
RelativeDateTimeFormatter.Field
Field constants used when accessing field information for relative
datetime strings in FormattedValue.
|
static class |
RelativeDateTimeFormatter.FormattedRelativeDateTime
Represents the result of a formatting operation of a relative datetime.
|
static class |
RelativeDateTimeFormatter.RelativeDateTimeUnit
Represents the unit for formatting a relative date. e.g "in 5 days"
or "next year"
|
static class |
RelativeDateTimeFormatter.RelativeUnit
Represents the unit for formatting a relative date. e.g "in 5 days"
or "in 3 months"
|
static class |
RelativeDateTimeFormatter.Style
The formatting style
|
Modifier and Type | Method and Description |
---|---|
String |
combineDateAndTime(String relativeDateString,
String timeString)
Combines a relative date string and a time string in this object's
locale.
|
String |
format(double quantity,
RelativeDateTimeFormatter.Direction direction,
RelativeDateTimeFormatter.RelativeUnit unit)
Formats a relative date with a quantity such as "in 5 days" or
"3 months ago".
|
String |
format(double offset,
RelativeDateTimeFormatter.RelativeDateTimeUnit unit)
Format a combination of RelativeDateTimeUnit and numeric offset
using a text style if possible, e.g.
|
String |
format(RelativeDateTimeFormatter.Direction direction,
RelativeDateTimeFormatter.AbsoluteUnit unit)
Formats a relative date without a quantity.
|
String |
formatNumeric(double offset,
RelativeDateTimeFormatter.RelativeDateTimeUnit unit)
Format a combination of RelativeDateTimeUnit and numeric offset
using a numeric style, e.g. "1 week ago", "in 1 week",
"5 weeks ago", "in 5 weeks".
|
RelativeDateTimeFormatter.FormattedRelativeDateTime |
formatNumericToValue(double offset,
RelativeDateTimeFormatter.RelativeDateTimeUnit unit)
Format a combination of RelativeDateTimeUnit and numeric offset
using a numeric style, e.g. "1 week ago", "in 1 week",
"5 weeks ago", "in 5 weeks".
|
RelativeDateTimeFormatter.FormattedRelativeDateTime |
formatToValue(double quantity,
RelativeDateTimeFormatter.Direction direction,
RelativeDateTimeFormatter.RelativeUnit unit)
Formats a relative date with a quantity such as "in 5 days" or
"3 months ago".
|
RelativeDateTimeFormatter.FormattedRelativeDateTime |
formatToValue(double offset,
RelativeDateTimeFormatter.RelativeDateTimeUnit unit)
Format a combination of RelativeDateTimeUnit and numeric offset
using a text style if possible, e.g.
|
RelativeDateTimeFormatter.FormattedRelativeDateTime |
formatToValue(RelativeDateTimeFormatter.Direction direction,
RelativeDateTimeFormatter.AbsoluteUnit unit)
Formats a relative date without a quantity.
|
DisplayContext |
getCapitalizationContext()
Return capitalization context.
|
RelativeDateTimeFormatter.Style |
getFormatStyle()
Return style
|
static RelativeDateTimeFormatter |
getInstance()
Returns a RelativeDateTimeFormatter for the default locale.
|
static RelativeDateTimeFormatter |
getInstance(Locale locale)
Returns a RelativeDateTimeFormatter for a particular
Locale . |
static RelativeDateTimeFormatter |
getInstance(Locale locale,
NumberFormat nf)
Returns a RelativeDateTimeFormatter for a particular
Locale that uses a
particular NumberFormat object. |
static RelativeDateTimeFormatter |
getInstance(ULocale locale)
Returns a RelativeDateTimeFormatter for a particular locale.
|
static RelativeDateTimeFormatter |
getInstance(ULocale locale,
NumberFormat nf)
Returns a RelativeDateTimeFormatter for a particular locale that uses a particular
NumberFormat object.
|
static RelativeDateTimeFormatter |
getInstance(ULocale locale,
NumberFormat nf,
RelativeDateTimeFormatter.Style style,
DisplayContext capitalizationContext)
Returns a RelativeDateTimeFormatter for a particular locale that uses a particular
NumberFormat object, style, and capitalization context
|
NumberFormat |
getNumberFormat()
Returns a copy of the NumberFormat this object is using.
|
public static RelativeDateTimeFormatter getInstance()
public static RelativeDateTimeFormatter getInstance(ULocale locale)
locale
- the locale.public static RelativeDateTimeFormatter getInstance(Locale locale)
Locale
.locale
- the Locale
.public static RelativeDateTimeFormatter getInstance(ULocale locale, NumberFormat nf)
locale
- the localenf
- the number format object. It is defensively copied to ensure thread-safety
and immutability of this class.public static RelativeDateTimeFormatter getInstance(ULocale locale, NumberFormat nf, RelativeDateTimeFormatter.Style style, DisplayContext capitalizationContext)
locale
- the localenf
- the number format object. It is defensively copied to ensure thread-safety
and immutability of this class. May be null.style
- the style.capitalizationContext
- the capitalization context.public static RelativeDateTimeFormatter getInstance(Locale locale, NumberFormat nf)
Locale
that uses a
particular NumberFormat object.locale
- the Locale
nf
- the number format object. It is defensively copied to ensure thread-safety
and immutability of this class.public String format(double quantity, RelativeDateTimeFormatter.Direction direction, RelativeDateTimeFormatter.RelativeUnit unit)
quantity
- The numerical amount e.g 5. This value is formatted
according to this object's NumberFormat
object.direction
- NEXT means a future relative date; LAST means a past
relative date.unit
- the unit e.g day? month? year?IllegalArgumentException
- if direction is something other than
NEXT or LAST.public RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(double quantity, RelativeDateTimeFormatter.Direction direction, RelativeDateTimeFormatter.RelativeUnit unit)
quantity
- The numerical amount e.g 5. This value is formatted
according to this object's NumberFormat
object.direction
- NEXT means a future relative date; LAST means a past
relative date.unit
- the unit e.g day? month? year?IllegalArgumentException
- if direction is something other than
NEXT or LAST.public String formatNumeric(double offset, RelativeDateTimeFormatter.RelativeDateTimeUnit unit)
offset
- The signed offset for the specified unit. This
will be formatted according to this object's
NumberFormat object.unit
- The unit to use when formatting the relative
date, e.g. RelativeDateTimeUnit.WEEK,
RelativeDateTimeUnit.FRIDAY.public RelativeDateTimeFormatter.FormattedRelativeDateTime formatNumericToValue(double offset, RelativeDateTimeFormatter.RelativeDateTimeUnit unit)
offset
- The signed offset for the specified unit. This
will be formatted according to this object's
NumberFormat object.unit
- The unit to use when formatting the relative
date, e.g. RelativeDateTimeUnit.WEEK,
RelativeDateTimeUnit.FRIDAY.public String format(RelativeDateTimeFormatter.Direction direction, RelativeDateTimeFormatter.AbsoluteUnit unit)
direction
- NEXT, LAST, THIS, etc.unit
- e.g SATURDAY, DAY, MONTHIllegalArgumentException
- if the direction is incompatible with
unit this can occur with NOW which can only take PLAIN.public RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(RelativeDateTimeFormatter.Direction direction, RelativeDateTimeFormatter.AbsoluteUnit unit)
direction
- NEXT, LAST, THIS, etc.unit
- e.g SATURDAY, DAY, MONTHIllegalArgumentException
- if the direction is incompatible with
unit this can occur with NOW which can only take PLAIN.public String format(double offset, RelativeDateTimeFormatter.RelativeDateTimeUnit unit)
offset
- The signed offset for the specified field.unit
- The unit to use when formatting the relative
date, e.g. RelativeDateTimeUnit.WEEK,
RelativeDateTimeUnit.FRIDAY.public RelativeDateTimeFormatter.FormattedRelativeDateTime formatToValue(double offset, RelativeDateTimeFormatter.RelativeDateTimeUnit unit)
offset
- The signed offset for the specified field.unit
- The unit to use when formatting the relative
date, e.g. RelativeDateTimeUnit.WEEK,
RelativeDateTimeUnit.FRIDAY.public String combineDateAndTime(String relativeDateString, String timeString)
relativeDateString
- the relative date e.g 'yesterday'timeString
- the time e.g '3:45'public NumberFormat getNumberFormat()
public DisplayContext getCapitalizationContext()
public RelativeDateTimeFormatter.Style getFormatStyle()
Copyright © 2016 Unicode, Inc. and others.