Skip to content

Commit f1f33c4

Browse files
author
The Android Open Source Project
committed
merge from open-source master
Change-Id: If7ae0c5629d1b3c540cacfa517425c2e6b5822d1
2 parents 766d1b7 + 6b9a1a5 commit f1f33c4

File tree

1 file changed

+53
-30
lines changed

1 file changed

+53
-30
lines changed

core/java/android/text/format/DateUtils.java

Lines changed: 53 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -496,7 +496,7 @@ public static CharSequence getRelativeTimeSpanString(long time, long now, long m
496496
}
497497
}
498498
} else if (duration < WEEK_IN_MILLIS && minResolution < WEEK_IN_MILLIS) {
499-
count = duration / DAY_IN_MILLIS;
499+
count = getNumberOfDaysPassed(time, now);
500500
if (past) {
501501
if (abbrevRelative) {
502502
resId = com.android.internal.R.plurals.abbrev_num_days_ago;
@@ -520,6 +520,24 @@ public static CharSequence getRelativeTimeSpanString(long time, long now, long m
520520
return String.format(format, count);
521521
}
522522

523+
/**
524+
* Returns the number of days passed between two dates.
525+
*
526+
* @param date1 first date
527+
* @param date2 second date
528+
* @return number of days passed between to dates.
529+
*/
530+
private synchronized static long getNumberOfDaysPassed(long date1, long date2) {
531+
if (sThenTime == null) {
532+
sThenTime = new Time();
533+
}
534+
sThenTime.set(date1);
535+
int day1 = Time.getJulianDay(date1, sThenTime.gmtoff);
536+
sThenTime.set(date2);
537+
int day2 = Time.getJulianDay(date2, sThenTime.gmtoff);
538+
return Math.abs(day2 - day1);
539+
}
540+
523541
/**
524542
* Return string describing the elapsed time since startTime formatted like
525543
* "[relative time/date], [time]".
@@ -1550,40 +1568,45 @@ public static String formatDateTime(Context context, long millis, int flags) {
15501568
public static CharSequence getRelativeTimeSpanString(Context c, long millis,
15511569
boolean withPreposition) {
15521570

1571+
String result;
15531572
long now = System.currentTimeMillis();
15541573
long span = now - millis;
15551574

1556-
if (sNowTime == null) {
1557-
sNowTime = new Time();
1558-
sThenTime = new Time();
1559-
}
1575+
synchronized (DateUtils.class) {
1576+
if (sNowTime == null) {
1577+
sNowTime = new Time();
1578+
}
15601579

1561-
sNowTime.set(now);
1562-
sThenTime.set(millis);
1580+
if (sThenTime == null) {
1581+
sThenTime = new Time();
1582+
}
15631583

1564-
String result;
1565-
int prepositionId;
1566-
if (span < DAY_IN_MILLIS && sNowTime.weekDay == sThenTime.weekDay) {
1567-
// Same day
1568-
int flags = FORMAT_SHOW_TIME;
1569-
result = formatDateRange(c, millis, millis, flags);
1570-
prepositionId = R.string.preposition_for_time;
1571-
} else if (sNowTime.year != sThenTime.year) {
1572-
// Different years
1573-
int flags = FORMAT_SHOW_DATE | FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE;
1574-
result = formatDateRange(c, millis, millis, flags);
1575-
1576-
// This is a date (like "10/31/2008" so use the date preposition)
1577-
prepositionId = R.string.preposition_for_date;
1578-
} else {
1579-
// Default
1580-
int flags = FORMAT_SHOW_DATE | FORMAT_ABBREV_MONTH;
1581-
result = formatDateRange(c, millis, millis, flags);
1582-
prepositionId = R.string.preposition_for_date;
1583-
}
1584-
if (withPreposition) {
1585-
Resources res = c.getResources();
1586-
result = res.getString(prepositionId, result);
1584+
sNowTime.set(now);
1585+
sThenTime.set(millis);
1586+
1587+
int prepositionId;
1588+
if (span < DAY_IN_MILLIS && sNowTime.weekDay == sThenTime.weekDay) {
1589+
// Same day
1590+
int flags = FORMAT_SHOW_TIME;
1591+
result = formatDateRange(c, millis, millis, flags);
1592+
prepositionId = R.string.preposition_for_time;
1593+
} else if (sNowTime.year != sThenTime.year) {
1594+
// Different years
1595+
int flags = FORMAT_SHOW_DATE | FORMAT_SHOW_YEAR | FORMAT_NUMERIC_DATE;
1596+
result = formatDateRange(c, millis, millis, flags);
1597+
1598+
// This is a date (like "10/31/2008" so use the date preposition)
1599+
prepositionId = R.string.preposition_for_date;
1600+
} else {
1601+
// Default
1602+
int flags = FORMAT_SHOW_DATE | FORMAT_ABBREV_MONTH;
1603+
result = formatDateRange(c, millis, millis, flags);
1604+
prepositionId = R.string.preposition_for_date;
1605+
}
1606+
if (withPreposition) {
1607+
Resources res = c.getResources();
1608+
result = res.getString(prepositionId, result);
1609+
}
15871610
}
15881611
return result;
15891612
}

0 commit comments

Comments
 (0)