Class PeriodFormat
- java.lang.Object
-
- org.joda.time.format.PeriodFormat
-
public class PeriodFormat extends java.lang.ObjectFactory that creates instances of PeriodFormatter.Period formatting is performed by the
PeriodFormatterclass. Three classes provide factory methods to create formatters, and this is one. The others areISOPeriodFormatandPeriodFormatterBuilder.PeriodFormat is thread-safe and immutable, and the formatters it returns are as well.
- Since:
- 1.0
- See Also:
ISOPeriodFormat,PeriodFormatterBuilder
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classPeriodFormat.DynamicWordBasedPrinter/parser that reacts to the locale and changes the word-based pattern if necessary.
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.StringBUNDLE_NAMEThe resource bundle name.private static java.util.concurrent.ConcurrentMap<java.util.Locale,PeriodFormatter>FORMATTERSThe created formatters.
-
Constructor Summary
Constructors Modifier Constructor Description protectedPeriodFormat()Constructor.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description private static PeriodFormatterbuildNonRegExFormatter(java.util.ResourceBundle b, java.util.Locale locale)private static PeriodFormatterbuildRegExFormatter(java.util.ResourceBundle b, java.util.Locale locale)private static PeriodFormatterbuildWordBased(java.util.Locale locale)private static booleancontainsKey(java.util.ResourceBundle bundle, java.lang.String key)static PeriodFormattergetDefault()Gets the default formatter that outputs words in English.private static java.lang.String[]retrieveVariants(java.util.ResourceBundle b)static PeriodFormatterwordBased()Returns a word based formatter for the JDK default locale.static PeriodFormatterwordBased(java.util.Locale locale)Returns a word based formatter for the specified locale.
-
-
-
Field Detail
-
BUNDLE_NAME
private static final java.lang.String BUNDLE_NAME
The resource bundle name.- See Also:
- Constant Field Values
-
FORMATTERS
private static final java.util.concurrent.ConcurrentMap<java.util.Locale,PeriodFormatter> FORMATTERS
The created formatters.
-
-
Method Detail
-
getDefault
public static PeriodFormatter getDefault()
Gets the default formatter that outputs words in English.This calls
wordBased(Locale)using a locale ofENGLISH.- Returns:
- the formatter, not null
-
wordBased
public static PeriodFormatter wordBased()
Returns a word based formatter for the JDK default locale.This calls
wordBased(Locale)using thedefault locale.- Returns:
- the formatter, not null
- Since:
- 2.0
-
wordBased
public static PeriodFormatter wordBased(java.util.Locale locale)
Returns a word based formatter for the specified locale.The words are configured in a resource bundle text file -
org.joda.time.format.messages. This can be added to via the normal classpath resource bundle mechanisms.You can add your own translation by creating messages_
.properties file and adding it to the org.joda.time.format.messagespath.Simple example (1 -> singular suffix, not 1 -> plural suffix):
PeriodFormat.space=\ PeriodFormat.comma=, PeriodFormat.commandand=,and PeriodFormat.commaspaceand=, and PeriodFormat.commaspace=, PeriodFormat.spaceandspace=\ and PeriodFormat.year=\ year PeriodFormat.years=\ years PeriodFormat.month=\ month PeriodFormat.months=\ months PeriodFormat.week=\ week PeriodFormat.weeks=\ weeks PeriodFormat.day=\ day PeriodFormat.days=\ days PeriodFormat.hour=\ hour PeriodFormat.hours=\ hours PeriodFormat.minute=\ minute PeriodFormat.minutes=\ minutes PeriodFormat.second=\ second PeriodFormat.seconds=\ seconds PeriodFormat.millisecond=\ millisecond PeriodFormat.milliseconds=\ milliseconds
Some languages contain more than two suffixes. You can use regular expressions for them. Here's an example using regular expression for English:
PeriodFormat.space=\ PeriodFormat.comma=, PeriodFormat.commandand=,and PeriodFormat.commaspaceand=, and PeriodFormat.commaspace=, PeriodFormat.spaceandspace=\ and PeriodFormat.regex.separator=% PeriodFormat.years.regex=1$%.* PeriodFormat.years.list=\ year%\ years PeriodFormat.months.regex=1$%.* PeriodFormat.months.list=\ month%\ months PeriodFormat.weeks.regex=1$%.* PeriodFormat.weeks.list=\ week%\ weeks PeriodFormat.days.regex=1$%.* PeriodFormat.days.list=\ day%\ days PeriodFormat.hours.regex=1$%.* PeriodFormat.hours.list=\ hour%\ hours PeriodFormat.minutes.regex=1$%.* PeriodFormat.minutes.list=\ minute%\ minutes PeriodFormat.seconds.regex=1$%.* PeriodFormat.seconds.list=\ second%\ seconds PeriodFormat.milliseconds.regex=1$%.* PeriodFormat.milliseconds.list=\ millisecond%\ milliseconds
You can mix both approaches. Here's example for Polish ( "1 year, 2 years, 5 years, 12 years, 15 years, 21 years, 22 years, 25 years" translates to "1 rok, 2 lata, 5 lat, 12 lat, 15 lat, 21 lat, 22 lata, 25 lat"). Notice that PeriodFormat.day and PeriodFormat.days is used for day suffixes as there is no need for regular expressions:
PeriodFormat.space=\ PeriodFormat.comma=, PeriodFormat.commandand=,i PeriodFormat.commaspaceand=, i PeriodFormat.commaspace=, PeriodFormat.spaceandspace=\ i PeriodFormat.regex.separator=% PeriodFormat.years.regex=^1$%[0-9]*(?<!1)[2-4]$%[0-9]* PeriodFormat.years.list=\ rok%\ lata%\ lat PeriodFormat.months.regex=^1$%[0-9]*(?<!1)[2-4]$%[0-9]* PeriodFormat.months.list=\ miesiąc%\ miesiące%\ miesięcy PeriodFormat.weeks.regex=^1$%[0-9]*(?<!1)[2-4]$%[0-9]* PeriodFormat.weeks.list=\ tydzień%\ tygodnie%\ tygodni PeriodFormat.day=\ dzień PeriodFormat.days=\ dni PeriodFormat.hours.regex=^1$%[0-9]*(?<!1)[2-4]$%[0-9]* PeriodFormat.hours.list=\ godzina%\ godziny%\ godzin PeriodFormat.minutes.regex=^1$%[0-9]*(?<!1)[2-4]$%[0-9]* PeriodFormat.minutes.list=\ minuta%\ minuty%\ minut PeriodFormat.seconds.regex=^1$%[0-9]*(?<!1)[2-4]$%[0-9]* PeriodFormat.seconds.list=\ sekunda%\ sekundy%\ sekund PeriodFormat.milliseconds.regex=^1$%[0-9]*(?<!1)[2-4]$%[0-9]* PeriodFormat.milliseconds.list=\ milisekunda%\ milisekundy%\ milisekund
Each PeriodFormat.<duration_field_type>.regex property stands for an array of regular expressions and is followed by a property PeriodFormat.<duration_field_type>.list holding an array of suffixes. PeriodFormat.regex.separator is used for splitting. See
PeriodFormatterBuilder.appendSuffix(String[], String[])for details.Available languages are English, Danish, Dutch, French, German, Japanese, Polish, Portuguese and Spanish.
- Returns:
- the formatter, not null
- Since:
- 2.0, regex since 2.5
-
buildWordBased
private static PeriodFormatter buildWordBased(java.util.Locale locale)
-
buildRegExFormatter
private static PeriodFormatter buildRegExFormatter(java.util.ResourceBundle b, java.util.Locale locale)
-
buildNonRegExFormatter
private static PeriodFormatter buildNonRegExFormatter(java.util.ResourceBundle b, java.util.Locale locale)
-
retrieveVariants
private static java.lang.String[] retrieveVariants(java.util.ResourceBundle b)
-
containsKey
private static boolean containsKey(java.util.ResourceBundle bundle, java.lang.String key)
-
-