Class DurationFormatUtils
- java.lang.Object
-
- org.apache.commons.lang3.time.DurationFormatUtils
-
public class DurationFormatUtils extends java.lang.ObjectDuration formatting utilities and constants. The following table describes the tokens used in the pattern language for formatting.
Note: It's not currently possible to include a single-quote in a format.Pattern Tokens character duration element y years M months d days H hours m minutes s seconds S milliseconds 'text' arbitrary text content
Token values are printed using decimal digits. A token character can be repeated to ensure that the field occupies a certain minimum size. Values will be left-padded with 0 unless padding is disabled in the method invocation.
Tokens can be marked as optional by surrounding them with brackets [ ]. These tokens will only be printed if the token value is non-zero. Literals within optional blocks will only be printed if the preceding non-literal token is non-zero. Leading optional literals will only be printed if the following non-literal is non-zero. Multiple optional blocks can be used to group literals with the desired token.Notes on Optional Tokens:
Multiple optional tokens without literals can result in impossible to understand output.
Patterns where all tokens are optional can produce empty strings.
(See examples below)
Note: Optional blocks cannot be nested.Example Output pattern Duration.ofDays(1) Duration.ofHours(1) Duration.ofMinutes(1) Duration.ZERO d'd'H'h'm'm's's' 1d0h0m0s 0d1h0m0s 0d0h1m0s 0d0h0m0s d'd'[H'h'm'm']s's' 1d0s 0d1h0s 0d1m0s 0d0s [d'd'H'h'm'm']s's' 1d0s 1h0s 1m0s 0s [d'd'H'h'm'm's's'] 1d 1h 1m ['{'d'}']HH':'mm {1}00:00 01:00 00:01 00:00 ['{'dd'}']['<'HH'>']['('mm')'] {01} <01> (00) [dHms] 1 1 1 - Since:
- 2.1
-
-
Field Summary
Fields Modifier and Type Field Description static java.lang.StringISO_EXTENDED_FORMAT_PATTERNPattern used withFastDateFormatandSimpleDateFormatfor the ISO 8601 period format used in durations.
-
Constructor Summary
Constructors Constructor Description DurationFormatUtils()DurationFormatUtils instances should NOT be constructed in standard programming.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static java.lang.StringformatDuration(long durationMillis, java.lang.String format)Formats the time gap as a string, using the specified format, and padding with zeros.static java.lang.StringformatDuration(long durationMillis, java.lang.String format, boolean padWithZeros)Formats the time gap as a string, using the specified format.static java.lang.StringformatDurationHMS(long durationMillis)Formats the time gap as a string.static java.lang.StringformatDurationISO(long durationMillis)Formats the time gap as a string.static java.lang.StringformatDurationWords(long durationMillis, boolean suppressLeadingZeroElements, boolean suppressTrailingZeroElements)Formats an elapsed time into a pluralization correct string.static java.lang.StringformatPeriod(long startMillis, long endMillis, java.lang.String format)Formats the time gap as a string, using the specified format.static java.lang.StringformatPeriod(long startMillis, long endMillis, java.lang.String format, boolean padWithZeros, java.util.TimeZone timezone)Formats the time gap as a string, using the specified format.static java.lang.StringformatPeriodISO(long startMillis, long endMillis)Formats the time gap as a string.
-
-
-
Field Detail
-
ISO_EXTENDED_FORMAT_PATTERN
public static final java.lang.String ISO_EXTENDED_FORMAT_PATTERN
Pattern used withFastDateFormatandSimpleDateFormatfor the ISO 8601 period format used in durations.- See Also:
FastDateFormat,SimpleDateFormat, Constant Field Values
-
-
Method Detail
-
formatDuration
public static java.lang.String formatDuration(long durationMillis, java.lang.String format)Formats the time gap as a string, using the specified format, and padding with zeros.This method formats durations using the days and lower fields of the format pattern. Months and larger are not used.
- Parameters:
durationMillis- the duration to formatformat- the way in which to format the duration, not null- Returns:
- the formatted duration, not null
- Throws:
java.lang.IllegalArgumentException- if durationMillis is negative
-
formatDuration
public static java.lang.String formatDuration(long durationMillis, java.lang.String format, boolean padWithZeros)Formats the time gap as a string, using the specified format. Padding the left-hand side of numbers with zeroes is optional.This method formats durations using the days and lower fields of the format pattern. Months and larger are not used.
- Parameters:
durationMillis- the duration to formatformat- the way in which to format the duration, not nullpadWithZeros- whether to pad the left-hand side of numbers with 0's- Returns:
- the formatted duration, not null
- Throws:
java.lang.IllegalArgumentException- if durationMillis is negative
-
formatDurationHMS
public static java.lang.String formatDurationHMS(long durationMillis)
Formats the time gap as a string.The format used is ISO 8601-like:
HH:mm:ss.SSS.- Parameters:
durationMillis- the duration to format- Returns:
- the formatted duration, not null
- Throws:
java.lang.IllegalArgumentException- if durationMillis is negative
-
formatDurationISO
public static java.lang.String formatDurationISO(long durationMillis)
Formats the time gap as a string.The format used is the ISO 8601 period format.
This method formats durations using the days and lower fields of the ISO format pattern, such as P7D6TH5M4.321S.
- Parameters:
durationMillis- the duration to format- Returns:
- the formatted duration, not null
- Throws:
java.lang.IllegalArgumentException- if durationMillis is negative
-
formatDurationWords
public static java.lang.String formatDurationWords(long durationMillis, boolean suppressLeadingZeroElements, boolean suppressTrailingZeroElements)Formats an elapsed time into a pluralization correct string.This method formats durations using the days and lower fields of the format pattern. Months and larger are not used.
- Parameters:
durationMillis- the elapsed time to report in millisecondssuppressLeadingZeroElements- suppresses leading 0 elementssuppressTrailingZeroElements- suppresses trailing 0 elements- Returns:
- the formatted text in days/hours/minutes/seconds, not null
- Throws:
java.lang.IllegalArgumentException- if durationMillis is negative
-
formatPeriod
public static java.lang.String formatPeriod(long startMillis, long endMillis, java.lang.String format)Formats the time gap as a string, using the specified format. Padding the left-hand side of numbers with zeroes is optional.- Parameters:
startMillis- the start of the durationendMillis- the end of the durationformat- the way in which to format the duration, not null- Returns:
- the formatted duration, not null
- Throws:
java.lang.IllegalArgumentException- if startMillis is greater than endMillis
-
formatPeriod
public static java.lang.String formatPeriod(long startMillis, long endMillis, java.lang.String format, boolean padWithZeros, java.util.TimeZone timezone)Formats the time gap as a string, using the specified format. Padding the left-hand side of numbers with zeroes is optional and the time zone may be specified.
When calculating the difference between months/days, it chooses to calculate months first. So when working out the number of months and days between January 15th and March 10th, it choose 1 month and 23 days gained by choosing January->February = 1 month and then calculating days forwards, and not the 1 month and 26 days gained by choosing March -> February = 1 month and then calculating days backwards.
For more control, the Joda-Time library is recommended.
- Parameters:
startMillis- the start of the durationendMillis- the end of the durationformat- the way in which to format the duration, not nullpadWithZeros- whether to pad the left-hand side of numbers with 0'stimezone- the millis are defined in- Returns:
- the formatted duration, not null
- Throws:
java.lang.IllegalArgumentException- if startMillis is greater than endMillis
-
formatPeriodISO
public static java.lang.String formatPeriodISO(long startMillis, long endMillis)Formats the time gap as a string.The format used is the ISO 8601 period format.
- Parameters:
startMillis- the start of the duration to formatendMillis- the end of the duration to format- Returns:
- the formatted duration, not null
- Throws:
java.lang.IllegalArgumentException- if startMillis is greater than endMillis
-
-