xref: /aosp_15_r20/external/libchrome/base/i18n/time_formatting.h (revision 635a864187cb8b6c713ff48b7e790a6b21769273)
1*635a8641SAndroid Build Coastguard Worker // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker 
5*635a8641SAndroid Build Coastguard Worker // Basic time formatting methods.  These methods use the current locale
6*635a8641SAndroid Build Coastguard Worker // formatting for displaying the time.
7*635a8641SAndroid Build Coastguard Worker 
8*635a8641SAndroid Build Coastguard Worker #ifndef BASE_I18N_TIME_FORMATTING_H_
9*635a8641SAndroid Build Coastguard Worker #define BASE_I18N_TIME_FORMATTING_H_
10*635a8641SAndroid Build Coastguard Worker 
11*635a8641SAndroid Build Coastguard Worker #include "base/compiler_specific.h"
12*635a8641SAndroid Build Coastguard Worker #include "base/i18n/base_i18n_export.h"
13*635a8641SAndroid Build Coastguard Worker #include "base/strings/string16.h"
14*635a8641SAndroid Build Coastguard Worker 
15*635a8641SAndroid Build Coastguard Worker namespace base {
16*635a8641SAndroid Build Coastguard Worker 
17*635a8641SAndroid Build Coastguard Worker class Time;
18*635a8641SAndroid Build Coastguard Worker class TimeDelta;
19*635a8641SAndroid Build Coastguard Worker 
20*635a8641SAndroid Build Coastguard Worker // Argument type used to specify the hour clock type.
21*635a8641SAndroid Build Coastguard Worker enum HourClockType {
22*635a8641SAndroid Build Coastguard Worker   k12HourClock,  // Uses 1-12. e.g., "3:07 PM"
23*635a8641SAndroid Build Coastguard Worker   k24HourClock,  // Uses 0-23. e.g., "15:07"
24*635a8641SAndroid Build Coastguard Worker };
25*635a8641SAndroid Build Coastguard Worker 
26*635a8641SAndroid Build Coastguard Worker // Argument type used to specify whether or not to include AM/PM sign.
27*635a8641SAndroid Build Coastguard Worker enum AmPmClockType {
28*635a8641SAndroid Build Coastguard Worker   kDropAmPm,  // Drops AM/PM sign. e.g., "3:07"
29*635a8641SAndroid Build Coastguard Worker   kKeepAmPm,  // Keeps AM/PM sign. e.g., "3:07 PM"
30*635a8641SAndroid Build Coastguard Worker };
31*635a8641SAndroid Build Coastguard Worker 
32*635a8641SAndroid Build Coastguard Worker // Should match UMeasureFormatWidth in measfmt.h; replicated here to avoid
33*635a8641SAndroid Build Coastguard Worker // requiring third_party/icu dependencies with this file.
34*635a8641SAndroid Build Coastguard Worker enum DurationFormatWidth {
35*635a8641SAndroid Build Coastguard Worker   DURATION_WIDTH_WIDE,    // "3 hours, 7 minutes"
36*635a8641SAndroid Build Coastguard Worker   DURATION_WIDTH_SHORT,   // "3 hr, 7 min"
37*635a8641SAndroid Build Coastguard Worker   DURATION_WIDTH_NARROW,  // "3h 7m"
38*635a8641SAndroid Build Coastguard Worker   DURATION_WIDTH_NUMERIC  // "3:07"
39*635a8641SAndroid Build Coastguard Worker };
40*635a8641SAndroid Build Coastguard Worker 
41*635a8641SAndroid Build Coastguard Worker // Date formats from third_party/icu/source/i18n/unicode/udat.h. Add more as
42*635a8641SAndroid Build Coastguard Worker // necessary.
43*635a8641SAndroid Build Coastguard Worker enum DateFormat {
44*635a8641SAndroid Build Coastguard Worker   // November 2007
45*635a8641SAndroid Build Coastguard Worker   DATE_FORMAT_YEAR_MONTH,
46*635a8641SAndroid Build Coastguard Worker   // Tuesday, 7 November
47*635a8641SAndroid Build Coastguard Worker   DATE_FORMAT_MONTH_WEEKDAY_DAY,
48*635a8641SAndroid Build Coastguard Worker };
49*635a8641SAndroid Build Coastguard Worker 
50*635a8641SAndroid Build Coastguard Worker // TODO([email protected]): Update all of these functions to return boolean
51*635a8641SAndroid Build Coastguard Worker // "success" values and use out-params for formatted strings:
52*635a8641SAndroid Build Coastguard Worker // http://crbug.com/698802
53*635a8641SAndroid Build Coastguard Worker 
54*635a8641SAndroid Build Coastguard Worker // Returns the time of day, e.g., "3:07 PM".
55*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT string16 TimeFormatTimeOfDay(const Time& time);
56*635a8641SAndroid Build Coastguard Worker 
57*635a8641SAndroid Build Coastguard Worker // Returns the time of day in 24-hour clock format with millisecond accuracy,
58*635a8641SAndroid Build Coastguard Worker // e.g., "15:07:30.568"
59*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT string16 TimeFormatTimeOfDayWithMilliseconds(const Time& time);
60*635a8641SAndroid Build Coastguard Worker 
61*635a8641SAndroid Build Coastguard Worker // Returns the time of day in the specified hour clock type. e.g.
62*635a8641SAndroid Build Coastguard Worker // "3:07 PM" (type == k12HourClock, ampm == kKeepAmPm).
63*635a8641SAndroid Build Coastguard Worker // "3:07"    (type == k12HourClock, ampm == kDropAmPm).
64*635a8641SAndroid Build Coastguard Worker // "15:07"   (type == k24HourClock).
65*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT string16 TimeFormatTimeOfDayWithHourClockType(
66*635a8641SAndroid Build Coastguard Worker     const Time& time,
67*635a8641SAndroid Build Coastguard Worker     HourClockType type,
68*635a8641SAndroid Build Coastguard Worker     AmPmClockType ampm);
69*635a8641SAndroid Build Coastguard Worker 
70*635a8641SAndroid Build Coastguard Worker // Returns a shortened date, e.g. "Nov 7, 2007"
71*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT string16 TimeFormatShortDate(const Time& time);
72*635a8641SAndroid Build Coastguard Worker 
73*635a8641SAndroid Build Coastguard Worker // Returns a numeric date such as 12/13/52.
74*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT string16 TimeFormatShortDateNumeric(const Time& time);
75*635a8641SAndroid Build Coastguard Worker 
76*635a8641SAndroid Build Coastguard Worker // Returns a numeric date and time such as "12/13/52 2:44:30 PM".
77*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT string16 TimeFormatShortDateAndTime(const Time& time);
78*635a8641SAndroid Build Coastguard Worker 
79*635a8641SAndroid Build Coastguard Worker // Returns a month and year, e.g. "November 2007"
80*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT string16 TimeFormatMonthAndYear(const Time& time);
81*635a8641SAndroid Build Coastguard Worker 
82*635a8641SAndroid Build Coastguard Worker // Returns a numeric date and time with time zone such as
83*635a8641SAndroid Build Coastguard Worker // "12/13/52 2:44:30 PM PST".
84*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT string16
85*635a8641SAndroid Build Coastguard Worker TimeFormatShortDateAndTimeWithTimeZone(const Time& time);
86*635a8641SAndroid Build Coastguard Worker 
87*635a8641SAndroid Build Coastguard Worker // Formats a time in a friendly sentence format, e.g.
88*635a8641SAndroid Build Coastguard Worker // "Monday, March 6, 2008 2:44:30 PM".
89*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT string16 TimeFormatFriendlyDateAndTime(const Time& time);
90*635a8641SAndroid Build Coastguard Worker 
91*635a8641SAndroid Build Coastguard Worker // Formats a time in a friendly sentence format, e.g.
92*635a8641SAndroid Build Coastguard Worker // "Monday, March 6, 2008".
93*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT string16 TimeFormatFriendlyDate(const Time& time);
94*635a8641SAndroid Build Coastguard Worker 
95*635a8641SAndroid Build Coastguard Worker // Formats a time using a skeleton to produce a format for different locales
96*635a8641SAndroid Build Coastguard Worker // when an unusual time format is needed, e.g. "Feb. 2, 18:00".
97*635a8641SAndroid Build Coastguard Worker //
98*635a8641SAndroid Build Coastguard Worker // See http://userguide.icu-project.org/formatparse/datetime for details.
99*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT string16 TimeFormatWithPattern(const Time& time,
100*635a8641SAndroid Build Coastguard Worker                                                 const char* pattern);
101*635a8641SAndroid Build Coastguard Worker 
102*635a8641SAndroid Build Coastguard Worker // Formats a time duration of hours and minutes into various formats, e.g.,
103*635a8641SAndroid Build Coastguard Worker // "3:07" or "3 hours, 7 minutes", and returns true on success. See
104*635a8641SAndroid Build Coastguard Worker // DurationFormatWidth for details.
105*635a8641SAndroid Build Coastguard Worker //
106*635a8641SAndroid Build Coastguard Worker // Please don't use width = DURATION_WIDTH_NUMERIC when the time duration
107*635a8641SAndroid Build Coastguard Worker // can possibly be larger than 24h, as the hour value will be cut below 24
108*635a8641SAndroid Build Coastguard Worker // after formatting.
109*635a8641SAndroid Build Coastguard Worker // TODO(chengx): fix function output when width = DURATION_WIDTH_NUMERIC
110*635a8641SAndroid Build Coastguard Worker // (http://crbug.com/675791)
111*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT bool TimeDurationFormat(const TimeDelta time,
112*635a8641SAndroid Build Coastguard Worker                                          const DurationFormatWidth width,
113*635a8641SAndroid Build Coastguard Worker                                          string16* out) WARN_UNUSED_RESULT;
114*635a8641SAndroid Build Coastguard Worker 
115*635a8641SAndroid Build Coastguard Worker // Formats a time duration of hours, minutes and seconds into various formats,
116*635a8641SAndroid Build Coastguard Worker // e.g., "3:07:30" or "3 hours, 7 minutes, 30 seconds", and returns true on
117*635a8641SAndroid Build Coastguard Worker // success. See DurationFormatWidth for details.
118*635a8641SAndroid Build Coastguard Worker //
119*635a8641SAndroid Build Coastguard Worker // Please don't use width = DURATION_WIDTH_NUMERIC when the time duration
120*635a8641SAndroid Build Coastguard Worker // can possibly be larger than 24h, as the hour value will be cut below 24
121*635a8641SAndroid Build Coastguard Worker // after formatting.
122*635a8641SAndroid Build Coastguard Worker // TODO(chengx): fix function output when width = DURATION_WIDTH_NUMERIC
123*635a8641SAndroid Build Coastguard Worker // (http://crbug.com/675791)
124*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT bool TimeDurationFormatWithSeconds(
125*635a8641SAndroid Build Coastguard Worker     const TimeDelta time,
126*635a8641SAndroid Build Coastguard Worker     const DurationFormatWidth width,
127*635a8641SAndroid Build Coastguard Worker     string16* out) WARN_UNUSED_RESULT;
128*635a8641SAndroid Build Coastguard Worker 
129*635a8641SAndroid Build Coastguard Worker // Formats a date interval into various formats, e.g. "2 December - 4 December"
130*635a8641SAndroid Build Coastguard Worker // or "March 2016 - December 2016". See DateFormat for details.
131*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT string16 DateIntervalFormat(const Time& begin_time,
132*635a8641SAndroid Build Coastguard Worker                                              const Time& end_time,
133*635a8641SAndroid Build Coastguard Worker                                              DateFormat format);
134*635a8641SAndroid Build Coastguard Worker 
135*635a8641SAndroid Build Coastguard Worker // Gets the hour clock type of the current locale. e.g.
136*635a8641SAndroid Build Coastguard Worker // k12HourClock (en-US).
137*635a8641SAndroid Build Coastguard Worker // k24HourClock (en-GB).
138*635a8641SAndroid Build Coastguard Worker BASE_I18N_EXPORT HourClockType GetHourClockType();
139*635a8641SAndroid Build Coastguard Worker 
140*635a8641SAndroid Build Coastguard Worker }  // namespace base
141*635a8641SAndroid Build Coastguard Worker 
142*635a8641SAndroid Build Coastguard Worker #endif  // BASE_I18N_TIME_FORMATTING_H_
143