1// Copyright (c) 2010 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#ifndef CHROME_COMMON_TIME_FORMAT_H__
6#define CHROME_COMMON_TIME_FORMAT_H__
7#pragma once
8
9// This file defines methods to format time values as strings.
10
11#include "base/string16.h"
12
13#include "unicode/smpdtfmt.h"
14
15namespace base {
16class Time;
17class TimeDelta;
18}
19
20class TimeFormat {
21 public:
22  // TimeElapsed, TimeRemaining and TimeRemainingShort functions:
23  // These functions return a localized string of approximate time duration. The
24  // conditions are simpler than PastTime since these functions are used for
25  // in-progress operations and users have different expectations of units.
26
27  // Returns times in elapsed-format: "3 mins ago", "2 days ago".
28  static string16 TimeElapsed(const base::TimeDelta& delta);
29
30  // Returns times in remaining-format: "3 mins left", "2 days left".
31  static string16 TimeRemaining(const base::TimeDelta& delta);
32
33  // Returns times in short-format: "3 mins", "2 days".
34  static string16 TimeRemainingShort(const base::TimeDelta& delta);
35
36  // For displaying a relative time in the past.  This method returns either
37  // "Today", "Yesterday", or an empty string if it's older than that.
38  //
39  // TODO(brettw): This should be able to handle days in the future like
40  //    "Tomorrow".
41  // TODO(tc): This should be able to do things like "Last week".  This
42  //    requires handling singluar/plural for all languages.
43  //
44  // The second parameter is optional, it is midnight of "Now" for relative day
45  // computations: Time::Now().LocalMidnight()
46  // If NULL, the current day's midnight will be retrieved, which can be
47  // slow. If many items are being processed, it is best to get the current
48  // time once at the beginning and pass it for each computation.
49  static string16 RelativeDate(const base::Time& time,
50                               const base::Time* optional_midnight_today);
51};
52
53#endif  // CHROME_COMMON_TIME_FORMAT_H__
54