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

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

Issue 1852433005: Convert //base to use std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase after r384946 Created 4 years, 8 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/number_formatting.cc ('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>
10
9 #include "base/logging.h" 11 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
12 #include "base/time/time.h" 13 #include "base/time/time.h"
13 #include "third_party/icu/source/i18n/unicode/datefmt.h" 14 #include "third_party/icu/source/i18n/unicode/datefmt.h"
14 #include "third_party/icu/source/i18n/unicode/dtptngen.h" 15 #include "third_party/icu/source/i18n/unicode/dtptngen.h"
15 #include "third_party/icu/source/i18n/unicode/smpdtfmt.h" 16 #include "third_party/icu/source/i18n/unicode/smpdtfmt.h"
16 17
17 namespace base { 18 namespace base {
18 namespace { 19 namespace {
19 20
20 string16 TimeFormat(const icu::DateFormat* formatter, 21 string16 TimeFormat(const icu::DateFormat* formatter,
(...skipping 25 matching lines...) Expand all
46 return string16(time_string.getBuffer(), 47 return string16(time_string.getBuffer(),
47 static_cast<size_t>(time_string.length())); 48 static_cast<size_t>(time_string.length()));
48 } 49 }
49 50
50 icu::SimpleDateFormat CreateSimpleDateFormatter(const char* pattern) { 51 icu::SimpleDateFormat CreateSimpleDateFormatter(const char* pattern) {
51 // Generate a locale-dependent format pattern. The generator will take 52 // Generate a locale-dependent format pattern. The generator will take
52 // care of locale-dependent formatting issues like which separator to 53 // care of locale-dependent formatting issues like which separator to
53 // use (some locales use '.' instead of ':'), and where to put the am/pm 54 // use (some locales use '.' instead of ':'), and where to put the am/pm
54 // marker. 55 // marker.
55 UErrorCode status = U_ZERO_ERROR; 56 UErrorCode status = U_ZERO_ERROR;
56 scoped_ptr<icu::DateTimePatternGenerator> generator( 57 std::unique_ptr<icu::DateTimePatternGenerator> generator(
57 icu::DateTimePatternGenerator::createInstance(status)); 58 icu::DateTimePatternGenerator::createInstance(status));
58 DCHECK(U_SUCCESS(status)); 59 DCHECK(U_SUCCESS(status));
59 icu::UnicodeString generated_pattern = 60 icu::UnicodeString generated_pattern =
60 generator->getBestPattern(icu::UnicodeString(pattern), status); 61 generator->getBestPattern(icu::UnicodeString(pattern), status);
61 DCHECK(U_SUCCESS(status)); 62 DCHECK(U_SUCCESS(status));
62 63
63 // Then, format the time using the generated pattern. 64 // Then, format the time using the generated pattern.
64 icu::SimpleDateFormat formatter(generated_pattern, status); 65 icu::SimpleDateFormat formatter(generated_pattern, status);
65 DCHECK(U_SUCCESS(status)); 66 DCHECK(U_SUCCESS(status));
66 67
67 return formatter; 68 return formatter;
68 } 69 }
69 70
70 } // namespace 71 } // namespace
71 72
72 string16 TimeFormatTimeOfDay(const Time& time) { 73 string16 TimeFormatTimeOfDay(const Time& time) {
73 // We can omit the locale parameter because the default should match 74 // We can omit the locale parameter because the default should match
74 // Chrome's application locale. 75 // Chrome's application locale.
75 scoped_ptr<icu::DateFormat> formatter( 76 std::unique_ptr<icu::DateFormat> formatter(
76 icu::DateFormat::createTimeInstance(icu::DateFormat::kShort)); 77 icu::DateFormat::createTimeInstance(icu::DateFormat::kShort));
77 return TimeFormat(formatter.get(), time); 78 return TimeFormat(formatter.get(), time);
78 } 79 }
79 80
80 string16 TimeFormatTimeOfDayWithMilliseconds(const Time& time) { 81 string16 TimeFormatTimeOfDayWithMilliseconds(const Time& time) {
81 icu::SimpleDateFormat formatter = CreateSimpleDateFormatter("HmsSSS"); 82 icu::SimpleDateFormat formatter = CreateSimpleDateFormatter("HmsSSS");
82 return TimeFormatWithoutAmPm(&formatter, time); 83 return TimeFormatWithoutAmPm(&formatter, time);
83 } 84 }
84 85
85 string16 TimeFormatTimeOfDayWithHourClockType(const Time& time, 86 string16 TimeFormatTimeOfDayWithHourClockType(const Time& time,
(...skipping 10 matching lines...) Expand all
96 icu::SimpleDateFormat formatter = CreateSimpleDateFormatter(base_pattern); 97 icu::SimpleDateFormat formatter = CreateSimpleDateFormatter(base_pattern);
97 98
98 if (ampm == kKeepAmPm) { 99 if (ampm == kKeepAmPm) {
99 return TimeFormat(&formatter, time); 100 return TimeFormat(&formatter, time);
100 } else { 101 } else {
101 return TimeFormatWithoutAmPm(&formatter, time); 102 return TimeFormatWithoutAmPm(&formatter, time);
102 } 103 }
103 } 104 }
104 105
105 string16 TimeFormatShortDate(const Time& time) { 106 string16 TimeFormatShortDate(const Time& time) {
106 scoped_ptr<icu::DateFormat> formatter( 107 std::unique_ptr<icu::DateFormat> formatter(
107 icu::DateFormat::createDateInstance(icu::DateFormat::kMedium)); 108 icu::DateFormat::createDateInstance(icu::DateFormat::kMedium));
108 return TimeFormat(formatter.get(), time); 109 return TimeFormat(formatter.get(), time);
109 } 110 }
110 111
111 string16 TimeFormatShortDateNumeric(const Time& time) { 112 string16 TimeFormatShortDateNumeric(const Time& time) {
112 scoped_ptr<icu::DateFormat> formatter( 113 std::unique_ptr<icu::DateFormat> formatter(
113 icu::DateFormat::createDateInstance(icu::DateFormat::kShort)); 114 icu::DateFormat::createDateInstance(icu::DateFormat::kShort));
114 return TimeFormat(formatter.get(), time); 115 return TimeFormat(formatter.get(), time);
115 } 116 }
116 117
117 string16 TimeFormatShortDateAndTime(const Time& time) { 118 string16 TimeFormatShortDateAndTime(const Time& time) {
118 scoped_ptr<icu::DateFormat> formatter( 119 std::unique_ptr<icu::DateFormat> formatter(
119 icu::DateFormat::createDateTimeInstance(icu::DateFormat::kShort)); 120 icu::DateFormat::createDateTimeInstance(icu::DateFormat::kShort));
120 return TimeFormat(formatter.get(), time); 121 return TimeFormat(formatter.get(), time);
121 } 122 }
122 123
123 string16 TimeFormatShortDateAndTimeWithTimeZone(const Time& time) { 124 string16 TimeFormatShortDateAndTimeWithTimeZone(const Time& time) {
124 scoped_ptr<icu::DateFormat> formatter(icu::DateFormat::createDateTimeInstance( 125 std::unique_ptr<icu::DateFormat> formatter(
125 icu::DateFormat::kShort, icu::DateFormat::kLong)); 126 icu::DateFormat::createDateTimeInstance(icu::DateFormat::kShort,
127 icu::DateFormat::kLong));
126 return TimeFormat(formatter.get(), time); 128 return TimeFormat(formatter.get(), time);
127 } 129 }
128 130
129 string16 TimeFormatFriendlyDateAndTime(const Time& time) { 131 string16 TimeFormatFriendlyDateAndTime(const Time& time) {
130 scoped_ptr<icu::DateFormat> formatter( 132 std::unique_ptr<icu::DateFormat> formatter(
131 icu::DateFormat::createDateTimeInstance(icu::DateFormat::kFull)); 133 icu::DateFormat::createDateTimeInstance(icu::DateFormat::kFull));
132 return TimeFormat(formatter.get(), time); 134 return TimeFormat(formatter.get(), time);
133 } 135 }
134 136
135 string16 TimeFormatFriendlyDate(const Time& time) { 137 string16 TimeFormatFriendlyDate(const Time& time) {
136 scoped_ptr<icu::DateFormat> formatter(icu::DateFormat::createDateInstance( 138 std::unique_ptr<icu::DateFormat> formatter(
137 icu::DateFormat::kFull)); 139 icu::DateFormat::createDateInstance(icu::DateFormat::kFull));
138 return TimeFormat(formatter.get(), time); 140 return TimeFormat(formatter.get(), time);
139 } 141 }
140 142
141 HourClockType GetHourClockType() { 143 HourClockType GetHourClockType() {
142 // TODO(satorux,jshin): Rework this with ures_getByKeyWithFallback() 144 // TODO(satorux,jshin): Rework this with ures_getByKeyWithFallback()
143 // once it becomes public. The short time format can be found at 145 // once it becomes public. The short time format can be found at
144 // "calendar/gregorian/DateTimePatterns/3" in the resources. 146 // "calendar/gregorian/DateTimePatterns/3" in the resources.
145 scoped_ptr<icu::SimpleDateFormat> formatter( 147 std::unique_ptr<icu::SimpleDateFormat> formatter(
146 static_cast<icu::SimpleDateFormat*>( 148 static_cast<icu::SimpleDateFormat*>(
147 icu::DateFormat::createTimeInstance(icu::DateFormat::kShort))); 149 icu::DateFormat::createTimeInstance(icu::DateFormat::kShort)));
148 // Retrieve the short time format. 150 // Retrieve the short time format.
149 icu::UnicodeString pattern_unicode; 151 icu::UnicodeString pattern_unicode;
150 formatter->toPattern(pattern_unicode); 152 formatter->toPattern(pattern_unicode);
151 153
152 // Determine what hour clock type the current locale uses, by checking 154 // Determine what hour clock type the current locale uses, by checking
153 // "a" (am/pm marker) in the short time format. This is reliable as "a" 155 // "a" (am/pm marker) in the short time format. This is reliable as "a"
154 // is used by all of 12-hour clock formats, but not any of 24-hour clock 156 // is used by all of 12-hour clock formats, but not any of 24-hour clock
155 // formats, as shown below. 157 // formats, as shown below.
(...skipping 16 matching lines...) Expand all
172 // See http://userguide.icu-project.org/formatparse/datetime for details 174 // See http://userguide.icu-project.org/formatparse/datetime for details
173 // about the date/time format syntax. 175 // about the date/time format syntax.
174 if (pattern_unicode.indexOf('a') == -1) { 176 if (pattern_unicode.indexOf('a') == -1) {
175 return k24HourClock; 177 return k24HourClock;
176 } else { 178 } else {
177 return k12HourClock; 179 return k12HourClock;
178 } 180 }
179 } 181 }
180 182
181 } // namespace base 183 } // namespace base
OLDNEW
« no previous file with comments | « base/i18n/number_formatting.cc ('k') | base/i18n/time_formatting_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698