LANG-987: DateUtils.getFragmentInDays(Date, Calendar.MONTH) returns wrong days, reported by Jay Xu.
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@1577332 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
66a37174a0
commit
80bd3fdb42
|
@ -22,6 +22,7 @@
|
|||
<body>
|
||||
|
||||
<release version="3.4" date="TBA" description="TBA">
|
||||
<action issue="LANG-987" type="fix" dev="djones">DateUtils.getFragmentInDays(Date, Calendar.MONTH) returns wrong days</action>
|
||||
<action issue="LANG-983" type="fix" dev="sebb">DurationFormatUtils does not describe format string fully</action>
|
||||
<action issue="LANG-981" type="fix" dev="sebb">DurationFormatUtils#lexx does not detect unmatched quote char</action>
|
||||
<action issue="LANG-984" type="fix" dev="sebb">DurationFormatUtils does not handle large durations correctly</action>
|
||||
|
|
|
@ -1690,13 +1690,15 @@ public class DateUtils {
|
|||
final long millisPerUnit = getMillisPerUnit(unit);
|
||||
long result = 0;
|
||||
|
||||
int offset = (unit == Calendar.DAY_OF_YEAR) ? 0 : 1;
|
||||
|
||||
// Fragments bigger than a day require a breakdown to days
|
||||
switch (fragment) {
|
||||
case Calendar.YEAR:
|
||||
result += ((calendar.get(Calendar.DAY_OF_YEAR) -1) * MILLIS_PER_DAY) / millisPerUnit;
|
||||
result += ((calendar.get(Calendar.DAY_OF_YEAR) - offset) * MILLIS_PER_DAY) / millisPerUnit;
|
||||
break;
|
||||
case Calendar.MONTH:
|
||||
result += ((calendar.get(Calendar.DAY_OF_MONTH) -1) * MILLIS_PER_DAY) / millisPerUnit;
|
||||
result += ((calendar.get(Calendar.DAY_OF_MONTH) - offset) * MILLIS_PER_DAY) / millisPerUnit;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
@ -561,4 +561,32 @@ testResult);
|
|||
/ DateUtils.MILLIS_PER_HOUR,
|
||||
testResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDaysOfMonthWithCalendar() throws Exception {
|
||||
final long testResult = DateUtils.getFragmentInDays(aCalendar, Calendar.MONTH);
|
||||
assertEquals(days, testResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDaysOfMonthWithDate() throws Exception {
|
||||
final long testResult = DateUtils.getFragmentInDays(aDate, Calendar.MONTH);
|
||||
final Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(aDate);
|
||||
assertEquals(cal.get(Calendar.DAY_OF_MONTH), testResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDaysOfYearWithCalendar() throws Exception {
|
||||
final long testResult = DateUtils.getFragmentInDays(aCalendar, Calendar.YEAR);
|
||||
assertEquals(aCalendar.get(Calendar.DAY_OF_YEAR), testResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDaysOfYearWithDate() throws Exception {
|
||||
final long testResult = DateUtils.getFragmentInDays(aDate, Calendar.YEAR);
|
||||
final Calendar cal = Calendar.getInstance();
|
||||
cal.setTime(aDate);
|
||||
assertEquals(cal.get(Calendar.DAY_OF_YEAR), testResult);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue