Avoid bad rounding "1 year, 12 months" in date formatter
Round first, then calculate the labels. This avoids "x years, 12 months" and instead produces "x+1 years". One test case has been added for the original example the bug was found with, and one assertion has been moved from an existing test case to the new test case, since it also triggered the bug. Bug: 525907 Change-Id: I3270af3850c4fb7bae9123a0a6582f93055c9780 Signed-off-by: Michael Keppler <Michael.Keppler@gmx.de> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
parent
0c5ea86af3
commit
b81c980a35
|
@ -128,7 +128,14 @@ public void testFormatYearsMonths() {
|
|||
assertFormat(380, DAY_IN_MILLIS, "1 year, 1 month ago");
|
||||
assertFormat(410, DAY_IN_MILLIS, "1 year, 2 months ago");
|
||||
assertFormat(2, YEAR_IN_MILLIS, "2 years ago");
|
||||
assertFormat(1824, DAY_IN_MILLIS, "4 years, 12 months ago");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFullYearMissingSomeDays() {
|
||||
// avoid "x year(s), 12 months", as humans would always round this up to
|
||||
// "x+1 years"
|
||||
assertFormat(5 * 365 + 1, DAY_IN_MILLIS, "5 years ago");
|
||||
assertFormat(2 * 365 - 10, DAY_IN_MILLIS, "2 years ago");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -114,10 +114,11 @@ public static String format(Date when) {
|
|||
|
||||
// up to 5 years use "year, months" rounded to months
|
||||
if (ageMillis < 5 * YEAR_IN_MILLIS) {
|
||||
long years = ageMillis / YEAR_IN_MILLIS;
|
||||
long years = round(ageMillis, MONTH_IN_MILLIS) / 12;
|
||||
String yearLabel = (years > 1) ? JGitText.get().years : //
|
||||
JGitText.get().year;
|
||||
long months = round(ageMillis % YEAR_IN_MILLIS, MONTH_IN_MILLIS);
|
||||
long months = round(ageMillis - years * YEAR_IN_MILLIS,
|
||||
MONTH_IN_MILLIS);
|
||||
String monthLabel = (months > 1) ? JGitText.get().months : //
|
||||
(months == 1 ? JGitText.get().month : ""); //$NON-NLS-1$
|
||||
return MessageFormat.format(
|
||||
|
|
Loading…
Reference in New Issue