Index: ui/base/l10n/time_format.cc |
diff --git a/ui/base/l10n/time_format.cc b/ui/base/l10n/time_format.cc |
index 772564b9d31794c130539efa7d84bbcf1f8d327f..2ac75b0686e39fc0f37549ebfa43cd2664ae4133 100644 |
--- a/ui/base/l10n/time_format.cc |
+++ b/ui/base/l10n/time_format.cc |
@@ -32,11 +32,28 @@ base::string16 TimeFormat::Simple(TimeFormat::Format format, |
return Detailed(format, length, 0, delta); |
} |
+base::string16 TimeFormat::SimpleWithMonthAndYear(TimeFormat::Format format, |
+ TimeFormat::Length length, |
+ const base::TimeDelta& delta, |
+ bool with_month_and_year) { |
+ return DetailedWithMonthAndYear(format, length, 0, delta, |
+ with_month_and_year); |
+} |
+ |
// static |
base::string16 TimeFormat::Detailed(TimeFormat::Format format, |
TimeFormat::Length length, |
int cutoff, |
const base::TimeDelta& delta) { |
+ return DetailedWithMonthAndYear(format, length, cutoff, delta, false); |
+} |
+ |
+base::string16 TimeFormat::DetailedWithMonthAndYear( |
+ TimeFormat::Format format, |
+ TimeFormat::Length length, |
+ int cutoff, |
+ const base::TimeDelta& delta, |
+ bool with_month_and_year) { |
if (delta < TimeDelta::FromSeconds(0)) { |
NOTREACHED() << "Negative duration"; |
return base::string16(); |
@@ -49,6 +66,13 @@ base::string16 TimeFormat::Detailed(TimeFormat::Format format, |
const TimeDelta one_minute(TimeDelta::FromMinutes(1)); |
const TimeDelta one_hour(TimeDelta::FromHours(1)); |
const TimeDelta one_day(TimeDelta::FromDays(1)); |
+ |
+ // An average month is a twelfth of a year. |
+ const TimeDelta one_month(TimeDelta::FromDays(365) / 12); |
+ |
+ // Simplify one year to be 365 days. |
+ const TimeDelta one_year(TimeDelta::FromDays(365)); |
+ |
const TimeDelta half_second(TimeDelta::FromMilliseconds(500)); |
const TimeDelta half_minute(TimeDelta::FromSeconds(30)); |
const TimeDelta half_hour(TimeDelta::FromMinutes(30)); |
@@ -91,8 +115,7 @@ base::string16 TimeFormat::Detailed(TimeFormat::Format format, |
formatter->Format(Formatter::TWO_UNITS_HOUR_MIN, |
hours, minutes, &time_string); |
} |
- |
- } else { |
+ } else if (!with_month_and_year || delta < one_month) { |
// Anything bigger is formatted as days (respectively days and hours). |
if (delta >= cutoff * one_day - half_hour) { |
const int days = (delta + half_day).InDays(); |
@@ -103,6 +126,15 @@ base::string16 TimeFormat::Detailed(TimeFormat::Format format, |
formatter->Format(Formatter::TWO_UNITS_DAY_HOUR, |
days, hours, &time_string); |
} |
+ } else if (delta < one_year) { |
+ DCHECK(with_month_and_year); |
+ int month = delta / one_month; |
+ DCHECK(month >= 1 && month <= 12); |
+ formatter->Format(Formatter::UNIT_MONTH, month, &time_string); |
+ } else { |
+ DCHECK(with_month_and_year); |
+ int year = delta / one_year; |
+ formatter->Format(Formatter::UNIT_YEAR, year, &time_string); |
} |
const int capacity = time_string.length() + 1; |