Chromium Code Reviews| Index: content/renderer/date_time_formatter.cc |
| diff --git a/content/renderer/date_time_formatter.cc b/content/renderer/date_time_formatter.cc |
| index 1adb0debddf9fa2f5c44f7af58be0f8e25aa9665..6b00e4647cbc62a30cb00bab198a542693d5d347 100644 |
| --- a/content/renderer/date_time_formatter.cc |
| +++ b/content/renderer/date_time_formatter.cc |
| @@ -25,6 +25,7 @@ void DateTimeFormatter::CreatePatternMap() { |
| patterns_[ui::TEXT_INPUT_TYPE_DATE_TIME_LOCAL] = "yyyy-MM-dd'T'HH:mm"; |
| patterns_[ui::TEXT_INPUT_TYPE_MONTH] = "yyyy-MM"; |
| patterns_[ui::TEXT_INPUT_TYPE_TIME] = "HH:mm"; |
| + patterns_[ui::TEXT_INPUT_TYPE_WEEK] = "Y-'W'ww"; |
| } |
| DateTimeFormatter::DateTimeFormatter( |
| @@ -41,14 +42,17 @@ DateTimeFormatter::DateTimeFormatter( |
| DateTimeFormatter::DateTimeFormatter( |
| ui::TextInputType type, |
| - int year, int month, int day, int hour, int minute, int second) |
| + int year, int month, int day, int hour, int minute, int second, |
| + int week_year, int week) |
| : type_(type), |
| year_(year), |
| month_(month), |
| day_(day), |
| hour_(hour), |
| minute_(minute), |
| - second_(second) { |
| + second_(second), |
| + week_year_(week_year), |
| + week_(week) { |
| CreatePatternMap(); |
| pattern_ = type_ > 0 && type_ <= ui::TEXT_INPUT_TYPE_MAX ? |
| &patterns_[type_] : &patterns_[ui::TEXT_INPUT_TYPE_NONE]; |
| @@ -83,6 +87,14 @@ int DateTimeFormatter::GetSecond() const { |
| return second_; |
| } |
| +int DateTimeFormatter::GetWeekYear() const { |
| + return week_year_; |
| +} |
| + |
| +int DateTimeFormatter::GetWeek() const { |
| + return week_; |
| +} |
| + |
| ui::TextInputType DateTimeFormatter::GetType() const { |
| return type_; |
| } |
| @@ -94,13 +106,26 @@ const std::string& DateTimeFormatter::GetFormattedValue() const { |
| const std::string DateTimeFormatter::FormatString() const { |
| UErrorCode success = U_ZERO_ERROR; |
| if (year_ == 0 && month_ == 0 && day_ == 0 && |
| - hour_ == 0 && minute_ == 0 && second_ == 0) { |
| + hour_ == 0 && minute_ == 0 && second_ == 0 && |
| + week_year_ == 0 && week_ == 0) { |
| return std::string(); |
| } |
| std::string result; |
| - const icu::GregorianCalendar calendar( |
| - year_, month_, day_, hour_, minute_, second_, success); |
| + icu::GregorianCalendar calendar(success); |
| + if (type_ == ui::TEXT_INPUT_TYPE_WEEK) { |
|
Miguel Garcia
2013/05/10 15:17:59
you probably want to check that success is still t
keishi
2013/05/14 13:47:47
Done.
|
| + calendar.setMinimalDaysInFirstWeek(4); |
|
Miguel Garcia
2013/05/10 15:17:59
I think some comment on why this is needed would b
keishi
2013/05/14 13:47:47
Done.
|
| + calendar.setFirstDayOfWeek(UCAL_MONDAY); |
|
Miguel Garcia
2013/05/10 15:17:59
Doesn't this depend on the locale?
keishi
2013/05/14 13:47:47
ISO weeks always start from Monday regardless of l
|
| + calendar.set(UCAL_YEAR_WOY, week_year_); |
| + calendar.set(UCAL_WEEK_OF_YEAR, week_); |
| + } else { |
|
Miguel Garcia
2013/05/10 15:17:59
it seems you can anyway set year, month... in all
keishi
2013/05/14 13:47:47
I may not be understanding you correctly. Are you
Miguel Garcia
2013/05/17 11:23:38
I'm still hesitant to special case week here, can
keishi
2013/05/22 07:33:26
calendar.getTime() will return milliseconds since
Miguel Garcia
2013/05/23 18:38:49
Ok, I think you've convinced me :)
On 2013/05/22
|
| + calendar.set(UCAL_YEAR, year_); |
| + calendar.set(UCAL_MONTH, month_); |
| + calendar.set(UCAL_DATE, day_); |
| + calendar.set(UCAL_HOUR_OF_DAY, hour_); |
| + calendar.set(UCAL_MINUTE, minute_); |
| + calendar.set(UCAL_SECOND, second_); |
| + } |
| if (success <= U_ZERO_ERROR) { |
| UDate time = calendar.getTime(success); |
| icu::SimpleDateFormat formatter(*pattern_, success); |
| @@ -135,6 +160,8 @@ void DateTimeFormatter::ExtractType( |
| type_ = ui::TEXT_INPUT_TYPE_TIME; |
| break; |
| case WebKit::WebDateTimeInputTypeWeek: // Not implemented |
| + type_ = ui::TEXT_INPUT_TYPE_WEEK; |
| + break; |
| case WebKit::WebDateTimeInputTypeNone: |
| default: |
| type_ = ui::TEXT_INPUT_TYPE_NONE; |
| @@ -176,6 +203,8 @@ bool DateTimeFormatter::ParseValues() { |
| hour_ = ExtractValue(cal, UCAL_HOUR_OF_DAY); // 24h format |
| minute_ = ExtractValue(cal, UCAL_MINUTE); |
| second_ = ExtractValue(cal, UCAL_SECOND); |
| + week_year_ = ExtractValue(cal, UCAL_YEAR_WOY); |
| + week_ = ExtractValue(cal, UCAL_WEEK_OF_YEAR); |
| } |
| } |
| @@ -189,6 +218,8 @@ void DateTimeFormatter::ClearAll() { |
| hour_ = 0; |
| minute_ = 0; |
| second_ = 0; |
| + week_year_ = 0; |
| + week_ = 0; |
| } |
| } // namespace content |