Home | History | Annotate | Download | only in l10n
      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
      3 // found in the LICENSE file.
      4 
      5 #ifndef UI_BASE_L10N_TIME_FORMAT_H_
      6 #define UI_BASE_L10N_TIME_FORMAT_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/strings/string16.h"
     10 #include "ui/base/ui_export.h"
     11 
     12 namespace base {
     13 class Time;
     14 class TimeDelta;
     15 }
     16 
     17 namespace ui {
     18 
     19 // Methods to format time values as strings.
     20 class UI_EXPORT 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 base::string16 TimeElapsed(const base::TimeDelta& delta);
     29 
     30   // Returns times in remaining-format: "3 mins left", "2 days left".
     31   static base::string16 TimeRemaining(const base::TimeDelta& delta);
     32 
     33   // Returns times in remaining-long-format: "3 minutes left", "2 days left".
     34   // Currently, this only affects the minutes in long format, the rest
     35   // of the time units are formatted the same as TimeRemaining does.
     36   static base::string16 TimeRemainingLong(const base::TimeDelta& delta);
     37 
     38   // Returns times in short-format: "3 mins", "2 days".
     39   static base::string16 TimeRemainingShort(const base::TimeDelta& delta);
     40 
     41   // Return times in long-format: "2 hours", "25 minutes".
     42   static base::string16 TimeDurationLong(const base::TimeDelta& delta);
     43 
     44   // For displaying a relative time in the past.  This method returns either
     45   // "Today", "Yesterday", or an empty string if it's older than that.  Returns
     46   // the empty string for days in the future.
     47   //
     48   // TODO(brettw): This should be able to handle days in the future like
     49   //    "Tomorrow".
     50   // TODO(tc): This should be able to do things like "Last week".  This
     51   //    requires handling singluar/plural for all languages.
     52   //
     53   // The second parameter is optional, it is midnight of "Now" for relative day
     54   // computations: Time::Now().LocalMidnight()
     55   // If NULL, the current day's midnight will be retrieved, which can be
     56   // slow. If many items are being processed, it is best to get the current
     57   // time once at the beginning and pass it for each computation.
     58   static base::string16 RelativeDate(const base::Time& time,
     59                                      const base::Time* optional_midnight_today);
     60 
     61  private:
     62   DISALLOW_IMPLICIT_CONSTRUCTORS(TimeFormat);
     63 };
     64 
     65 }  // namespace ui
     66 
     67 #endif  // UI_BASE_L10N_TIME_FORMAT_H_
     68