Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(51)

Side by Side Diff: base/i18n/time_formatting.cc

Issue 2570253002: [MD History] Fix toolbar dates in grouped mode. (Closed)
Patch Set: rebase Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « base/i18n/time_formatting.h ('k') | base/i18n/time_formatting_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/i18n/time_formatting.h" 5 #include "base/i18n/time_formatting.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
13 #include "base/time/time.h" 13 #include "base/time/time.h"
14 #include "third_party/icu/source/i18n/unicode/datefmt.h" 14 #include "third_party/icu/source/i18n/unicode/datefmt.h"
15 #include "third_party/icu/source/i18n/unicode/dtitvfmt.h"
15 #include "third_party/icu/source/i18n/unicode/dtptngen.h" 16 #include "third_party/icu/source/i18n/unicode/dtptngen.h"
16 #include "third_party/icu/source/i18n/unicode/fmtable.h" 17 #include "third_party/icu/source/i18n/unicode/fmtable.h"
17 #include "third_party/icu/source/i18n/unicode/measfmt.h" 18 #include "third_party/icu/source/i18n/unicode/measfmt.h"
18 #include "third_party/icu/source/i18n/unicode/smpdtfmt.h" 19 #include "third_party/icu/source/i18n/unicode/smpdtfmt.h"
19 20
20 namespace base { 21 namespace base {
21 namespace { 22 namespace {
22 23
23 string16 TimeFormat(const icu::DateFormat* formatter, 24 string16 TimeFormat(const icu::DateFormat* formatter,
24 const Time& time) { 25 const Time& time) {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 switch (width) { 75 switch (width) {
75 case DURATION_WIDTH_WIDE: return UMEASFMT_WIDTH_WIDE; 76 case DURATION_WIDTH_WIDE: return UMEASFMT_WIDTH_WIDE;
76 case DURATION_WIDTH_SHORT: return UMEASFMT_WIDTH_SHORT; 77 case DURATION_WIDTH_SHORT: return UMEASFMT_WIDTH_SHORT;
77 case DURATION_WIDTH_NARROW: return UMEASFMT_WIDTH_NARROW; 78 case DURATION_WIDTH_NARROW: return UMEASFMT_WIDTH_NARROW;
78 case DURATION_WIDTH_NUMERIC: return UMEASFMT_WIDTH_NUMERIC; 79 case DURATION_WIDTH_NUMERIC: return UMEASFMT_WIDTH_NUMERIC;
79 } 80 }
80 NOTREACHED(); 81 NOTREACHED();
81 return UMEASFMT_WIDTH_COUNT; 82 return UMEASFMT_WIDTH_COUNT;
82 } 83 }
83 84
85 const char* DateFormatToString(DateFormat format) {
86 switch (format) {
87 case DATE_FORMAT_YEAR_MONTH:
88 return UDAT_YEAR_MONTH;
89 case DATE_FORMAT_MONTH_WEEKDAY_DAY:
90 return UDAT_MONTH_WEEKDAY_DAY;
91 }
92 NOTREACHED();
93 return UDAT_YEAR_MONTH_DAY;
94 }
95
84 } // namespace 96 } // namespace
85 97
86 string16 TimeFormatTimeOfDay(const Time& time) { 98 string16 TimeFormatTimeOfDay(const Time& time) {
87 // We can omit the locale parameter because the default should match 99 // We can omit the locale parameter because the default should match
88 // Chrome's application locale. 100 // Chrome's application locale.
89 std::unique_ptr<icu::DateFormat> formatter( 101 std::unique_ptr<icu::DateFormat> formatter(
90 icu::DateFormat::createTimeInstance(icu::DateFormat::kShort)); 102 icu::DateFormat::createTimeInstance(icu::DateFormat::kShort));
91 return TimeFormat(formatter.get(), time); 103 return TimeFormat(formatter.get(), time);
92 } 104 }
93 105
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 return TimeFormat(formatter.get(), time); 146 return TimeFormat(formatter.get(), time);
135 } 147 }
136 148
137 string16 TimeFormatShortDateAndTimeWithTimeZone(const Time& time) { 149 string16 TimeFormatShortDateAndTimeWithTimeZone(const Time& time) {
138 std::unique_ptr<icu::DateFormat> formatter( 150 std::unique_ptr<icu::DateFormat> formatter(
139 icu::DateFormat::createDateTimeInstance(icu::DateFormat::kShort, 151 icu::DateFormat::createDateTimeInstance(icu::DateFormat::kShort,
140 icu::DateFormat::kLong)); 152 icu::DateFormat::kLong));
141 return TimeFormat(formatter.get(), time); 153 return TimeFormat(formatter.get(), time);
142 } 154 }
143 155
156 string16 TimeFormatMonthAndYear(const Time& time) {
157 icu::SimpleDateFormat formatter =
158 CreateSimpleDateFormatter(DateFormatToString(DATE_FORMAT_YEAR_MONTH));
159 return TimeFormat(&formatter, time);
160 }
161
144 string16 TimeFormatFriendlyDateAndTime(const Time& time) { 162 string16 TimeFormatFriendlyDateAndTime(const Time& time) {
145 std::unique_ptr<icu::DateFormat> formatter( 163 std::unique_ptr<icu::DateFormat> formatter(
146 icu::DateFormat::createDateTimeInstance(icu::DateFormat::kFull)); 164 icu::DateFormat::createDateTimeInstance(icu::DateFormat::kFull));
147 return TimeFormat(formatter.get(), time); 165 return TimeFormat(formatter.get(), time);
148 } 166 }
149 167
150 string16 TimeFormatFriendlyDate(const Time& time) { 168 string16 TimeFormatFriendlyDate(const Time& time) {
151 std::unique_ptr<icu::DateFormat> formatter( 169 std::unique_ptr<icu::DateFormat> formatter(
152 icu::DateFormat::createDateInstance(icu::DateFormat::kFull)); 170 icu::DateFormat::createDateInstance(icu::DateFormat::kFull));
153 return TimeFormat(formatter.get(), time); 171 return TimeFormat(formatter.get(), time);
(...skipping 30 matching lines...) Expand all
184 icu::Measure(hours, icu::MeasureUnit::createHour(status), status), 202 icu::Measure(hours, icu::MeasureUnit::createHour(status), status),
185 icu::Measure(minutes, icu::MeasureUnit::createMinute(status), status), 203 icu::Measure(minutes, icu::MeasureUnit::createMinute(status), status),
186 icu::Measure(seconds, icu::MeasureUnit::createSecond(status), status)}; 204 icu::Measure(seconds, icu::MeasureUnit::createSecond(status), status)};
187 icu::MeasureFormat measure_format(icu::Locale::getDefault(), u_width, status); 205 icu::MeasureFormat measure_format(icu::Locale::getDefault(), u_width, status);
188 icu::UnicodeString formatted; 206 icu::UnicodeString formatted;
189 icu::FieldPosition ignore(icu::FieldPosition::DONT_CARE); 207 icu::FieldPosition ignore(icu::FieldPosition::DONT_CARE);
190 measure_format.formatMeasures(measures, 3, formatted, ignore, status); 208 measure_format.formatMeasures(measures, 3, formatted, ignore, status);
191 return base::string16(formatted.getBuffer(), formatted.length()); 209 return base::string16(formatted.getBuffer(), formatted.length());
192 } 210 }
193 211
212 string16 DateIntervalFormat(const Time& begin_time,
213 const Time& end_time,
214 DateFormat format) {
215 UErrorCode status = U_ZERO_ERROR;
216
217 std::unique_ptr<icu::DateIntervalFormat> formatter(
218 icu::DateIntervalFormat::createInstance(DateFormatToString(format),
219 status));
220
221 icu::FieldPosition pos = 0;
222 UDate start_date = static_cast<UDate>(begin_time.ToDoubleT() * 1000);
223 UDate end_date = static_cast<UDate>(end_time.ToDoubleT() * 1000);
224 icu::DateInterval interval(start_date, end_date);
225 icu::UnicodeString formatted;
226 formatter->format(&interval, formatted, pos, status);
227 return string16(formatted.getBuffer(),
228 static_cast<size_t>(formatted.length()));
229 }
230
194 HourClockType GetHourClockType() { 231 HourClockType GetHourClockType() {
195 // TODO(satorux,jshin): Rework this with ures_getByKeyWithFallback() 232 // TODO(satorux,jshin): Rework this with ures_getByKeyWithFallback()
196 // once it becomes public. The short time format can be found at 233 // once it becomes public. The short time format can be found at
197 // "calendar/gregorian/DateTimePatterns/3" in the resources. 234 // "calendar/gregorian/DateTimePatterns/3" in the resources.
198 std::unique_ptr<icu::SimpleDateFormat> formatter( 235 std::unique_ptr<icu::SimpleDateFormat> formatter(
199 static_cast<icu::SimpleDateFormat*>( 236 static_cast<icu::SimpleDateFormat*>(
200 icu::DateFormat::createTimeInstance(icu::DateFormat::kShort))); 237 icu::DateFormat::createTimeInstance(icu::DateFormat::kShort)));
201 // Retrieve the short time format. 238 // Retrieve the short time format.
202 icu::UnicodeString pattern_unicode; 239 icu::UnicodeString pattern_unicode;
203 formatter->toPattern(pattern_unicode); 240 formatter->toPattern(pattern_unicode);
(...skipping 21 matching lines...) Expand all
225 // See http://userguide.icu-project.org/formatparse/datetime for details 262 // See http://userguide.icu-project.org/formatparse/datetime for details
226 // about the date/time format syntax. 263 // about the date/time format syntax.
227 if (pattern_unicode.indexOf('a') == -1) { 264 if (pattern_unicode.indexOf('a') == -1) {
228 return k24HourClock; 265 return k24HourClock;
229 } else { 266 } else {
230 return k12HourClock; 267 return k12HourClock;
231 } 268 }
232 } 269 }
233 270
234 } // namespace base 271 } // namespace base
OLDNEW
« no previous file with comments | « base/i18n/time_formatting.h ('k') | base/i18n/time_formatting_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698