13345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved.
206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// Use of this source code is governed by a BSD-style license that can be
306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// found in the LICENSE file.
406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#ifndef CHROME_COMMON_TIME_FORMAT_H__
606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#define CHROME_COMMON_TIME_FORMAT_H__
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// This file defines methods to format time values as strings.
1006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string16.h"
1206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
1306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "unicode/smpdtfmt.h"
1406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
1506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochnamespace base {
1606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochclass Time;
1706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochclass TimeDelta;
1806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
1906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
2006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochclass TimeFormat {
2106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch public:
2206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // TimeElapsed, TimeRemaining and TimeRemainingShort functions:
2306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // These functions return a localized string of approximate time duration. The
2406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // conditions are simpler than PastTime since these functions are used for
2506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // in-progress operations and users have different expectations of units.
2606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
2706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // Returns times in elapsed-format: "3 mins ago", "2 days ago".
283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  static string16 TimeElapsed(const base::TimeDelta& delta);
2906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
3006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // Returns times in remaining-format: "3 mins left", "2 days left".
313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  static string16 TimeRemaining(const base::TimeDelta& delta);
3206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
3306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // Returns times in short-format: "3 mins", "2 days".
343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  static string16 TimeRemainingShort(const base::TimeDelta& delta);
3506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
3606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // For displaying a relative time in the past.  This method returns either
3706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // "Today", "Yesterday", or an empty string if it's older than that.
3806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  //
3906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // TODO(brettw): This should be able to handle days in the future like
4006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  //    "Tomorrow".
4106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // TODO(tc): This should be able to do things like "Last week".  This
4206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  //    requires handling singluar/plural for all languages.
4306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  //
4406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // The second parameter is optional, it is midnight of "Now" for relative day
4506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // computations: Time::Now().LocalMidnight()
4606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // If NULL, the current day's midnight will be retrieved, which can be
4706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // slow. If many items are being processed, it is best to get the current
4806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // time once at the beginning and pass it for each computation.
493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  static string16 RelativeDate(const base::Time& time,
503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                               const base::Time* optional_midnight_today);
5106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch};
5206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
5306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#endif  // CHROME_COMMON_TIME_FORMAT_H__
54