time_formatting.cc revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
1// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/i18n/time_formatting.h"
6
7#include "base/logging.h"
8#include "base/scoped_ptr.h"
9#include "base/utf_string_conversions.h"
10#include "base/time.h"
11#include "unicode/datefmt.h"
12
13using base::Time;
14
15namespace {
16
17string16 TimeFormat(const icu::DateFormat* formatter,
18                    const Time& time) {
19  DCHECK(formatter);
20  icu::UnicodeString date_string;
21
22  formatter->format(static_cast<UDate>(time.ToDoubleT() * 1000), date_string);
23  return string16(date_string.getBuffer(),
24                  static_cast<size_t>(date_string.length()));
25}
26
27}  // namespace
28
29namespace base {
30
31string16 TimeFormatTimeOfDay(const Time& time) {
32  // We can omit the locale parameter because the default should match
33  // Chrome's application locale.
34  scoped_ptr<icu::DateFormat> formatter(
35      icu::DateFormat::createTimeInstance(icu::DateFormat::kShort));
36  return TimeFormat(formatter.get(), time);
37}
38
39string16 TimeFormatShortDate(const Time& time) {
40  scoped_ptr<icu::DateFormat> formatter(
41      icu::DateFormat::createDateInstance(icu::DateFormat::kMedium));
42  return TimeFormat(formatter.get(), time);
43}
44
45string16 TimeFormatShortDateNumeric(const Time& time) {
46  scoped_ptr<icu::DateFormat> formatter(
47      icu::DateFormat::createDateInstance(icu::DateFormat::kShort));
48  return TimeFormat(formatter.get(), time);
49}
50
51string16 TimeFormatShortDateAndTime(const Time& time) {
52  scoped_ptr<icu::DateFormat> formatter(
53      icu::DateFormat::createDateTimeInstance(icu::DateFormat::kShort));
54  return TimeFormat(formatter.get(), time);
55}
56
57string16 TimeFormatFriendlyDateAndTime(const Time& time) {
58  scoped_ptr<icu::DateFormat> formatter(
59      icu::DateFormat::createDateTimeInstance(icu::DateFormat::kFull));
60  return TimeFormat(formatter.get(), time);
61}
62
63string16 TimeFormatFriendlyDate(const Time& time) {
64  scoped_ptr<icu::DateFormat> formatter(icu::DateFormat::createDateInstance(
65      icu::DateFormat::kFull));
66  return TimeFormat(formatter.get(), time);
67}
68
69}  // namespace base
70