typo fixed, a couple of extra overload methods added (need javadoc) and formatting for start->end changed to match millis implementation, for a pattern of M, 4 years is reported as 48 months and not 0 months.
git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/lang/trunk@137940 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
3424e42050
commit
f80cb56da1
|
@ -41,7 +41,7 @@ import java.util.TimeZone;
|
||||||
* @author <a href="mailto:ggregory@seagullsw.com">Gary Gregory</a>
|
* @author <a href="mailto:ggregory@seagullsw.com">Gary Gregory</a>
|
||||||
* @author Henri Yandell
|
* @author Henri Yandell
|
||||||
* @since 2.1
|
* @since 2.1
|
||||||
* @version $Id: DurationFormatUtils.java,v 1.18 2004/09/27 03:40:15 bayard Exp $
|
* @version $Id: DurationFormatUtils.java,v 1.19 2004/09/27 04:49:07 bayard Exp $
|
||||||
*/
|
*/
|
||||||
public class DurationFormatUtils {
|
public class DurationFormatUtils {
|
||||||
|
|
||||||
|
@ -95,6 +95,14 @@ public class DurationFormatUtils {
|
||||||
return format(millis, "H:mm:ss.SSS");
|
return format(millis, "H:mm:ss.SSS");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String format(long millis) {
|
||||||
|
return format(millis, ISO_EXTENDED_FORMAT_PATTERN, false, TimeZone.getDefault() );
|
||||||
|
}
|
||||||
|
public static String format(long startMillis, long endMillis) {
|
||||||
|
return format(startMillis, endMillis, ISO_EXTENDED_FORMAT_PATTERN, false, TimeZone.getDefault() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Get the time gap as a string, using the specified format, and padding with zeros and
|
* <p>Get the time gap as a string, using the specified format, and padding with zeros and
|
||||||
* using the default timezone.</p>
|
* using the default timezone.</p>
|
||||||
|
@ -221,11 +229,10 @@ public class DurationFormatUtils {
|
||||||
* @param startMillis the start of the duration
|
* @param startMillis the start of the duration
|
||||||
* @param endMillis the end of the duration
|
* @param endMillis the end of the duration
|
||||||
* @param format the way in which to format the duration
|
* @param format the way in which to format the duration
|
||||||
* @param padWithZeros whether to pad the left hand side of numbers with 0's
|
|
||||||
* @return the time as a String
|
* @return the time as a String
|
||||||
*/
|
*/
|
||||||
public static String format(long startMillis, long endMillis, String format, boolean padWithZeros) {
|
public static String format(long startMillis, long endMillis, String format) {
|
||||||
return format(startMillis, endMillis, format, padWithZeros, TimeZone.getDefault());
|
return format(startMillis, endMillis, format, true, TimeZone.getDefault());
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* <p>Get the time gap as a string, using the specified format.
|
* <p>Get the time gap as a string, using the specified format.
|
||||||
|
@ -266,7 +273,7 @@ public class DurationFormatUtils {
|
||||||
int days = end.get(Calendar.DAY_OF_MONTH) - start.get(Calendar.DAY_OF_MONTH);
|
int days = end.get(Calendar.DAY_OF_MONTH) - start.get(Calendar.DAY_OF_MONTH);
|
||||||
while(days < 0) {
|
while(days < 0) {
|
||||||
days += 31; // such overshooting is taken care of later on
|
days += 31; // such overshooting is taken care of later on
|
||||||
days -= 1;
|
months -= 1;
|
||||||
}
|
}
|
||||||
int hours = end.get(Calendar.HOUR_OF_DAY) - start.get(Calendar.HOUR_OF_DAY);
|
int hours = end.get(Calendar.HOUR_OF_DAY) - start.get(Calendar.HOUR_OF_DAY);
|
||||||
while(hours < 0) {
|
while(hours < 0) {
|
||||||
|
@ -298,6 +305,40 @@ public class DurationFormatUtils {
|
||||||
months -= reduceAndCorrect( start, end, Calendar.MONTH, months );
|
months -= reduceAndCorrect( start, end, Calendar.MONTH, months );
|
||||||
years -= reduceAndCorrect( start, end, Calendar.YEAR, years );
|
years -= reduceAndCorrect( start, end, Calendar.YEAR, years );
|
||||||
|
|
||||||
|
// This next block of code adds in values that
|
||||||
|
// aren't requested. This allows the user to ask for the
|
||||||
|
// number of months and get the real count and not just 0->11.
|
||||||
|
if(!Token.containsTokenWithValue(tokens, y) ) {
|
||||||
|
if(Token.containsTokenWithValue(tokens, M) ) {
|
||||||
|
months += 12 * years;
|
||||||
|
years = 0;
|
||||||
|
} else {
|
||||||
|
// TODO: this is a bit weak, needs work to know about leap years
|
||||||
|
days += 365 * years;
|
||||||
|
years = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!Token.containsTokenWithValue(tokens, M) ) {
|
||||||
|
days += end.get(Calendar.DAY_OF_YEAR) - start.get(Calendar.DAY_OF_YEAR);
|
||||||
|
months = 0;
|
||||||
|
}
|
||||||
|
if(!Token.containsTokenWithValue(tokens, d) ) {
|
||||||
|
hours += 24 * days;
|
||||||
|
days = 0;
|
||||||
|
}
|
||||||
|
if(!Token.containsTokenWithValue(tokens, H) ) {
|
||||||
|
minutes += 60 * hours;
|
||||||
|
hours = 0;
|
||||||
|
}
|
||||||
|
if(!Token.containsTokenWithValue(tokens, m) ) {
|
||||||
|
seconds += 60 * minutes;
|
||||||
|
minutes = 0;
|
||||||
|
}
|
||||||
|
if(!Token.containsTokenWithValue(tokens, s) ) {
|
||||||
|
milliseconds += 1000 * seconds;
|
||||||
|
seconds = 0;
|
||||||
|
}
|
||||||
|
|
||||||
return formatDuration(tokens, years, months, days, hours, minutes, seconds, milliseconds, padWithZeros);
|
return formatDuration(tokens, years, months, days, hours, minutes, seconds, milliseconds, padWithZeros);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue