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