smpdtfmt.h revision b0ac937921a2c196d8b9da665135bf6ba01a1ccf
1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru* Copyright (C) 1997-2009, International Business Machines Corporation and others. All Rights Reserved. 3b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* File SMPDTFMT.H 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History: 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Date Name Description 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 02/19/97 aliu Converted from java. 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 07/09/97 helena Make ParsePosition into a class. 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 07/21/98 stephen Added GMT_PLUS, GMT_MINUS 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Changed setTwoDigitStartDate to set2DigitYearStart 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Changed getTwoDigitStartDate to get2DigitYearStart 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Removed subParseLong 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Removed getZoneIndex (added in DateFormatSymbols) 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 06/14/99 stephen Removed fgTimeZoneDataSuffix 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 10/14/99 aliu Updated class doc to describe 2-digit year parsing 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* {j28 4182066}. 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************* 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef SMPDTFMT_H 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define SMPDTFMT_H 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \file 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \brief C++ API: Format and parse dates in a language-independent manner. 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/datefmt.h" 36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN 38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass DateFormatSymbols; 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass DateFormat; 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass MessageFormat; 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * SimpleDateFormat is a concrete class for formatting and parsing dates in a 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * language-independent manner. It allows for formatting (millis -> text), 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * parsing (text -> millis), and normalization. Formats/Parses a date or time, 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * which is the standard milliseconds since 24:00 GMT, Jan 1, 1970. 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Clients are encouraged to create a date-time formatter using DateFormat::getInstance(), 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * getDateInstance(), getDateInstance(), or getDateTimeInstance() rather than 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * explicitly constructing an instance of SimpleDateFormat. This way, the client 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is guaranteed to get an appropriate formatting pattern for whatever locale the 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * program is running in. However, if the client needs something more unusual than 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the default patterns in the locales, he can construct a SimpleDateFormat directly 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and give it an appropriate pattern (or use one of the factory methods on DateFormat 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and modify the pattern after the fact with toPattern() and applyPattern(). 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Date/Time format syntax: 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The date/time format is specified by means of a string time pattern. In this 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * pattern, all ASCII letters are reserved as pattern letters, which are defined 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * as the following: 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <pre> 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Symbol Meaning Presentation Example 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ------ ------- ------------ ------- 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * G era designator (Text) AD 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * y year (Number) 1996 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Y year (week of year) (Number) 1997 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * u extended year (Number) 4601 72c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * Q Quarter (Text & Number) Q2 & 02 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * M month in year (Text & Number) July & 07 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * d day in month (Number) 10 75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * h hour in am/pm (1~12) (Number) 12 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * H hour in day (0~23) (Number) 0 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * m minute in hour (Number) 30 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * s second in minute (Number) 55 79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * S fractional second (Number) 978 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * E day of week (Text) Tuesday 81c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * e day of week (local 1~7) (Text & Number) Tues & 2 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * D day in year (Number) 189 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * F day of week in month (Number) 2 (2nd Wed in July) 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * w week in year (Number) 27 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * W week in month (Number) 2 86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a am/pm marker (Text) PM 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * k hour in day (1~24) (Number) 24 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * K hour in am/pm (0~11) (Number) 0 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * z time zone (Time) Pacific Standard Time 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Z time zone (RFC 822) (Number) -0800 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * v time zone (generic) (Text) Pacific Time 92c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * V time zone (abreviation) (Text) PT 93c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * VVVV time zone (location) (Text) United States (Los Angeles) 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * g Julian day (Number) 2451334 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A milliseconds in day (Number) 69540000 96c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * q stand alone quarter (Text & Number) Q2 & 02 97c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * L stand alone month (Text & Number) July & 07 98c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * c stand alone day of week (Text & Number) Tuesday & 2 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ' escape for text (Delimiter) 'Date=' 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * '' single quote (Literal) 'o''clock' 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </pre> 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The count of pattern letters determine the format. 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (Text): 4 or more, use full form, <4, use short or abbreviated form if it 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * exists. (e.g., "EEEE" produces "Monday", "EEE" produces "Mon") 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (Number): the minimum number of digits. Shorter numbers are zero-padded to 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * this amount (e.g. if "m" produces "6", "mm" produces "06"). Year is handled 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * specially; that is, if the count of 'y' is 2, the Year will be truncated to 2 digits. 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (e.g., if "yyyy" produces "1997", "yy" produces "97".) 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Unlike other fields, fractional seconds are padded on the right with zero. 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (Text & Number): 3 or over, use text, otherwise use number. (e.g., "M" produces "1", 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "MM" produces "01", "MMM" produces "Jan", and "MMMM" produces "January".) 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Any characters in the pattern that are not in the ranges of ['a'..'z'] and 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ['A'..'Z'] will be treated as quoted text. For instance, characters 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * like ':', '.', ' ', '#' and '@' will appear in the resulting time text 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * even they are not embraced within single quotes. 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A pattern containing any invalid pattern letter will result in a failing 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UErrorCode result during formatting or parsing. 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Examples using the US locale: 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <pre> 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Format Pattern Result 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * -------------- ------- 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "yyyy.MM.dd G 'at' HH:mm:ss vvvv" ->> 1996.07.10 AD at 15:08:56 Pacific Time 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "EEE, MMM d, ''yy" ->> Wed, July 10, '96 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "h:mm a" ->> 12:08 PM 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "hh 'o''clock' a, zzzz" ->> 12 o'clock PM, Pacific Daylight Time 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "K:mm a, vvv" ->> 0:00 PM, PT 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "yyyyy.MMMMM.dd GGG hh:mm aaa" ->> 1996.July.10 AD 12:08 PM 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </pre> 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Code Sample: 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <pre> 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UErrorCode success = U_ZERO_ERROR; 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * SimpleTimeZone* pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, "PST"); 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * pdt->setStartRule( Calendar::APRIL, 1, Calendar::SUNDAY, 2*60*60*1000); 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * pdt->setEndRule( Calendar::OCTOBER, -1, Calendar::SUNDAY, 2*60*60*1000); 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * // Format the current time. 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * SimpleDateFormat* formatter 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * = new SimpleDateFormat ("yyyy.MM.dd G 'at' hh:mm:ss a zzz", success ); 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * GregorianCalendar cal(success); 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UDate currentTime_1 = cal.getTime(success); 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * FieldPosition fp(0); 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UnicodeString dateString; 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * formatter->format( currentTime_1, dateString, fp ); 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * cout << "result: " << dateString << endl; 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * // Parse the previous string back into a Date. 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ParsePosition pp(0); 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UDate currentTime_2 = formatter->parse(dateString, pp ); 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </pre> 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * In the above example, the time value "currentTime_2" obtained from parsing 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * will be equal to currentTime_1. However, they may not be equal if the am/pm 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * marker 'a' is left out from the format pattern while the "hour in am/pm" 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * pattern symbol is used. This information loss can happen when formatting the 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * time in PM. 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p> 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * When parsing a date string using the abbreviated year pattern ("y" or "yy"), 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * SimpleDateFormat must interpret the abbreviated year 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * relative to some century. It does this by adjusting dates to be 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * within 80 years before and 20 years after the time the SimpleDateFormat 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * instance is created. For example, using a pattern of "MM/dd/yy" and a 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * SimpleDateFormat instance created on Jan 1, 1997, the string 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "01/11/12" would be interpreted as Jan 11, 2012 while the string "05/04/64" 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * would be interpreted as May 4, 1964. 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * During parsing, only strings consisting of exactly two digits, as defined by 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <code>Unicode::isDigit()</code>, will be parsed into the default century. 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Any other numeric string, such as a one digit string, a three or more digit 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * string, or a two digit string that isn't all digits (for example, "-1"), is 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * interpreted literally. So "01/02/3" or "01/02/003" are parsed, using the 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * same pattern, as Jan 2, 3 AD. Likewise, "01/02/-3" is parsed as Jan 2, 4 BC. 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p> 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If the year pattern has more than two 'y' characters, the year is 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * interpreted literally, regardless of the number of digits. So using the 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * pattern "MM/dd/yyyy", "01/11/12" parses to Jan 11, 12 A.D. 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p> 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * When numeric fields abut one another directly, with no intervening delimiter 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * characters, they constitute a run of abutting numeric fields. Such runs are 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * parsed specially. For example, the format "HHmmss" parses the input text 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "123456" to 12:34:56, parses the input text "12345" to 1:23:45, and fails to 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * parse "1234". In other words, the leftmost field of the run is flexible, 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * while the others keep a fixed width. If the parse fails anywhere in the run, 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * then the leftmost field is shortened by one character, and the entire run is 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * parsed again. This is repeated until either the parse succeeds or the 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * leftmost field is one character in length. If the parse still fails at that 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * point, the parse of the run fails. 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * For time zones that have no names, SimpleDateFormat uses strings GMT+hours:minutes or 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * GMT-hours:minutes. 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The calendar defines what is the first day of the week, the first week of the 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * year, whether hours are zero based or not (0 vs 12 or 24), and the timezone. 206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * There is one common number format to handle all the numbers; the digit count 207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is handled programmatically according to the pattern. 208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p><em>User subclasses are not supported.</em> While clients may write 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * subclasses, such code will not necessarily work and will not be 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * guaranteed to work stably from release to release. 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass U_I18N_API SimpleDateFormat: public DateFormat { 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic: 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Construct a SimpleDateFormat using the default pattern for the default 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * locale. 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [Note:] Not all locales support SimpleDateFormat; for full generality, 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * use the factory methods in the DateFormat class. 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Output param set to success/failure code. 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat(UErrorCode& status); 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Construct a SimpleDateFormat using the given pattern and the default locale. 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The locale is used to obtain the symbols used in formatting (e.g., the 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * names of the months), but not to provide the pattern. 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [Note:] Not all locales support SimpleDateFormat; for full generality, 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * use the factory methods in the DateFormat class. 233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pattern the pattern for the format. 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Output param set to success/failure code. 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat(const UnicodeString& pattern, 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& status); 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 241b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Construct a SimpleDateFormat using the given pattern, numbering system override, and the default locale. 242b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * The locale is used to obtain the symbols used in formatting (e.g., the 243b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * names of the months), but not to provide the pattern. 244b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * <P> 245b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * A numbering system override is a string containing either the name of a known numbering system, 246b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * or a set of field and numbering system pairs that specify which fields are to be formattied with 247b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * the alternate numbering system. For example, to specify that all numeric fields in the specified 248b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * date or time pattern are to be rendered using Thai digits, simply specify the numbering system override 249b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * as "thai". To specify that just the year portion of the date be formatted using Hebrew numbering, 250b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * use the override string "y=hebrew". Numbering system overrides can be combined using a semi-colon 251b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * character in the override string, such as "d=decimal;M=arabic;y=hebrew", etc. 252b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * 253b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * <P> 254b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * [Note:] Not all locales support SimpleDateFormat; for full generality, 255b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * use the factory methods in the DateFormat class. 256b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param pattern the pattern for the format. 257b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param override the override string. 258b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param status Output param set to success/failure code. 259b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @draft ICU 4.2 260b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 261b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru SimpleDateFormat(const UnicodeString& pattern, 262b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UnicodeString& override, 263b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode& status); 264b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 265b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Construct a SimpleDateFormat using the given pattern and locale. 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The locale is used to obtain the symbols used in formatting (e.g., the 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * names of the months), but not to provide the pattern. 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [Note:] Not all locales support SimpleDateFormat; for full generality, 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * use the factory methods in the DateFormat class. 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pattern the pattern for the format. 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param locale the given locale. 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Output param set to success/failure code. 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat(const UnicodeString& pattern, 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const Locale& locale, 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& status); 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 282b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Construct a SimpleDateFormat using the given pattern, numbering system override, and locale. 283b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * The locale is used to obtain the symbols used in formatting (e.g., the 284b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * names of the months), but not to provide the pattern. 285b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * <P> 286b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * A numbering system override is a string containing either the name of a known numbering system, 287b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * or a set of field and numbering system pairs that specify which fields are to be formattied with 288b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * the alternate numbering system. For example, to specify that all numeric fields in the specified 289b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * date or time pattern are to be rendered using Thai digits, simply specify the numbering system override 290b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * as "thai". To specify that just the year portion of the date be formatted using Hebrew numbering, 291b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * use the override string "y=hebrew". Numbering system overrides can be combined using a semi-colon 292b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * character in the override string, such as "d=decimal;M=arabic;y=hebrew", etc. 293b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * <P> 294b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * [Note:] Not all locales support SimpleDateFormat; for full generality, 295b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * use the factory methods in the DateFormat class. 296b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param pattern the pattern for the format. 297b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param override the numbering system override. 298b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param locale the given locale. 299b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param status Output param set to success/failure code. 300b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @draft ICU 4.2 301b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 302b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru SimpleDateFormat(const UnicodeString& pattern, 303b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UnicodeString& override, 304b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const Locale& locale, 305b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UErrorCode& status); 306b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 307b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Construct a SimpleDateFormat using the given pattern and locale-specific 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * symbol data. The formatter takes ownership of the DateFormatSymbols object; 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the caller is no longer responsible for deleting it. 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pattern the given pattern for the format. 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param formatDataToAdopt the symbols to be adopted. 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Output param set to success/faulure code. 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat(const UnicodeString& pattern, 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormatSymbols* formatDataToAdopt, 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& status); 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Construct a SimpleDateFormat using the given pattern and locale-specific 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * symbol data. The DateFormatSymbols object is NOT adopted; the caller 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * remains responsible for deleting it. 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pattern the given pattern for the format. 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param formatData the formatting symbols to be use. 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Output param set to success/faulure code. 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat(const UnicodeString& pattern, 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const DateFormatSymbols& formatData, 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& status); 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Copy constructor. 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat(const SimpleDateFormat&); 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Assignment operator. 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat& operator=(const SimpleDateFormat&); 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Destructor. 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual ~SimpleDateFormat(); 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Clone this Format object polymorphically. The caller owns the result and 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * should delete it when done. 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return A copy of the object. 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual Format* clone(void) const; 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return true if the given Format objects are semantically equal. Objects 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * of different subclasses are considered unequal. 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param other the object to be compared with. 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return true if the given Format objects are semantically equal. 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UBool operator==(const Format& other) const; 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Format a date or time, which is the standard millis since 24:00 GMT, Jan 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1, 1970. Overrides DateFormat pure virtual method. 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Example: using the US locale: "yyyy.MM.dd e 'at' HH:mm:ss zzz" ->> 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1996.07.10 AD at 15:08:56 PDT 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param cal Calendar set to the date and time to be formatted 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * into a date/time string. 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param appendTo Output parameter to receive result. 378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Result is appended to existing contents. 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pos The formatting position. On input: an alignment field, 380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * if desired. On output: the offsets of the alignment field. 381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return Reference to 'appendTo' parameter. 382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.1 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& format( Calendar& cal, 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& appendTo, 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition& pos) const; 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Format a date or time, which is the standard millis since 24:00 GMT, Jan 390b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1, 1970. Overrides DateFormat pure virtual method. 391b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Example: using the US locale: "yyyy.MM.dd e 'at' HH:mm:ss zzz" ->> 393b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 1996.07.10 AD at 15:08:56 PDT 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 395b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param obj A Formattable containing the date-time value to be formatted 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * into a date-time string. If the type of the Formattable 397b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is a numeric type, it is treated as if it were an 398b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * instance of Date. 399b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param appendTo Output parameter to receive result. 400b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Result is appended to existing contents. 401b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pos The formatting position. On input: an alignment field, 402b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * if desired. On output: the offsets of the alignment field. 403b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Output param set to success/faulure code. 404b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return Reference to 'appendTo' parameter. 405b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 406b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 407b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& format( const Formattable& obj, 408b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& appendTo, 409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition& pos, 410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& status) const; 411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Redeclared DateFormat method. 414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param date the Date value to be formatted. 415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param appendTo Output parameter to receive result. 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Result is appended to existing contents. 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param fieldPosition The formatting position. On input: an alignment field, 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * if desired. On output: the offsets of the alignment field. 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return Reference to 'appendTo' parameter. 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.1 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& format(UDate date, 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& appendTo, 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition& fieldPosition) const; 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Redeclared DateFormat method. 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param obj Object to be formatted. 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param appendTo Output parameter to receive result. 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Result is appended to existing contents. 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Input/output success/failure code. 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return Reference to 'appendTo' parameter. 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& format(const Formattable& obj, 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& appendTo, 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& status) const; 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Redeclared DateFormat method. 441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param date Date value to be formatted. 442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param appendTo Output parameter to receive result. 443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Result is appended to existing contents. 444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return Reference to 'appendTo' parameter. 445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& format(UDate date, UnicodeString& appendTo) const; 448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Parse a date/time string beginning at the given parse position. For 451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date 452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * that is equivalent to Date(837039928046). 453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * By default, parsing is lenient: If the input is not in the form used by 455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * this object's format method but can still be parsed as a date, then the 456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * parse succeeds. Clients may insist on strict adherence to the format by 457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * calling setLenient(false). 458b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 459b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param text The date/time string to be parsed 460b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param cal a Calendar set to the date and time to be formatted 461b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * into a date/time string. 462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pos On input, the position at which to start parsing; on 463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * output, the position at which parsing terminated, or the 464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * start position if the parse failed. 465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return A valid UDate if the input could be parsed. 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.1 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void parse( const UnicodeString& text, 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar& cal, 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition& pos) const; 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Parse a date/time string starting at the given parse position. For 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * example, a time text "07/10/96 4:5 PM, PDT" will be parsed into a Date 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * that is equivalent to Date(837039928046). 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * By default, parsing is lenient: If the input is not in the form used by 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * this object's format method but can still be parsed as a date, then the 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * parse succeeds. Clients may insist on strict adherence to the format by 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * calling setLenient(false). 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see DateFormat::setLenient(boolean) 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param text The date/time string to be parsed 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pos On input, the position at which to start parsing; on 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * output, the position at which parsing terminated, or the 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * start position if the parse failed. 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return A valid UDate if the input could be parsed. 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate parse( const UnicodeString& text, 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition& pos) const; 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Parse a date/time string. For example, a time text "07/10/96 4:5 PM, PDT" 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * will be parsed into a UDate that is equivalent to Date(837039928046). 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Parsing begins at the beginning of the string and proceeds as far as 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * possible. Assuming no parse errors were encountered, this function 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * doesn't return any information about how much of the string was consumed 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * by the parsing. If you need that information, use the version of 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * parse() that takes a ParsePosition. 503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param text The date/time string to be parsed 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Filled in with U_ZERO_ERROR if the parse was successful, and with 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * an error value if there was a parse error. 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return A valid UDate if the input could be parsed. 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UDate parse( const UnicodeString& text, 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& status) const; 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set the start UDate used to interpret two-digit year strings. 515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * When dates are parsed having 2-digit year strings, they are placed within 516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a assumed range of 100 years starting on the two digit start date. For 517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * example, the string "24-Jan-17" may be in the year 1817, 1917, 2017, or 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * some other year. SimpleDateFormat chooses a year so that the resultant 519b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * date is on or after the two digit start date and within 100 years of the 520b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * two digit start date. 521b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 522b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * By default, the two digit start date is set to 80 years before the current 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * time at which a SimpleDateFormat object is created. 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param d start UDate used to interpret two-digit year strings. 525b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Filled in with U_ZERO_ERROR if the parse was successful, and with 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * an error value if there was a parse error. 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void set2DigitYearStart(UDate d, UErrorCode& status); 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 532b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get the start UDate used to interpret two-digit year strings. 533b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * When dates are parsed having 2-digit year strings, they are placed within 534b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a assumed range of 100 years starting on the two digit start date. For 535b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * example, the string "24-Jan-17" may be in the year 1817, 1917, 2017, or 536b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * some other year. SimpleDateFormat chooses a year so that the resultant 537b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * date is on or after the two digit start date and within 100 years of the 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * two digit start date. 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P> 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * By default, the two digit start date is set to 80 years before the current 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * time at which a SimpleDateFormat object is created. 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Filled in with U_ZERO_ERROR if the parse was successful, and with 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * an error value if there was a parse error. 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate get2DigitYearStart(UErrorCode& status) const; 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return a pattern string describing this date format. 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param result Output param to receive the pattern. 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return A reference to 'result'. 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 554b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& toPattern(UnicodeString& result) const; 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return a localized pattern string describing this date format. 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * In most cases, this will return the same thing as toPattern(), 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * but a locale can specify characters to use in pattern descriptions 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in place of the ones described in this class's class documentation. 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (Presumably, letters that would be more mnemonic in that locale's 562b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * language.) This function would produce a pattern using those 563b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * letters. 564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param result Receives the localized pattern. 566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Output param set to success/failure code on 567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * exit. If the pattern is invalid, this will be 568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * set to a failure result. 569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return A reference to 'result'. 570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UnicodeString& toLocalizedPattern(UnicodeString& result, 573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& status) const; 574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Apply the given unlocalized pattern string to this date format. 577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (i.e., after this call, this formatter will format dates according to 578b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the new pattern) 579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pattern The pattern to be applied. 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void applyPattern(const UnicodeString& pattern); 584b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Apply the given localized pattern string to this date format. 587b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * (see toLocalizedPattern() for more information on localized patterns.) 588b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 589b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pattern The localized pattern to be applied. 590b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Output param set to success/failure code on 591b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * exit. If the pattern is invalid, this will be 592b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * set to a failure result. 593b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 594b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 595b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void applyLocalizedPattern(const UnicodeString& pattern, 596b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& status); 597b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 598b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 599b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Gets the date/time formatting symbols (this is an object carrying 600b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the various strings and other symbols used in formatting: e.g., month 601b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * names and abbreviations, time zone names, AM/PM strings, etc.) 602b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return a copy of the date-time formatting data associated 603b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with this date-time formatter. 604b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 605b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 606b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual const DateFormatSymbols* getDateFormatSymbols(void) const; 607b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 608b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 609b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set the date/time formatting symbols. The caller no longer owns the 610b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * DateFormatSymbols object and should not delete it after making this call. 611b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param newFormatSymbols the given date-time formatting symbols to copy. 612b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 613b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 614b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void adoptDateFormatSymbols(DateFormatSymbols* newFormatSymbols); 615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set the date/time formatting data. 618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param newFormatSymbols the given date-time formatting symbols to copy. 619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 621b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void setDateFormatSymbols(const DateFormatSymbols& newFormatSymbols); 622b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return the class ID for this class. This is useful only for comparing to 625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a return value from getDynamicClassID(). For example: 626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <pre> 627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * . Base* polymorphic_pointer = createPolymorphicObject(); 628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * . if (polymorphic_pointer->getDynamicClassID() == 629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * . erived::getStaticClassID()) ... 630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </pre> 631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return The class ID for all objects of this class. 632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static UClassID U_EXPORT2 getStaticClassID(void); 635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * method is to implement a simple version of RTTI, since not all C++ 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * compilers support genuine RTTI. Polymorphic operator==() and clone() 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * methods call this method. 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return The class ID for this object. All objects of a 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * given class have the same class ID. Objects of 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * other classes have different class IDs. 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual UClassID getDynamicClassID(void) const; 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set the calendar to be used by this date format. Initially, the default 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * calendar for the specified or default locale is used. The caller should 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * not delete the Calendar object after it is adopted by this call. 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Adopting a new calendar will change to the default symbols. 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param calendarToAdopt Calendar object to be adopted. 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru virtual void adoptCalendar(Calendar* calendarToAdopt); 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 660c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /** 661c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * This is for ICU internal use only. Please do not use. 662c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * Check whether the 'field' is smaller than all the fields covered in 663c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * pattern, return TRUE if it is. The sequence of calendar field, 664c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * from large to small is: ERA, YEAR, MONTH, DATE, AM_PM, HOUR, MINUTE,... 665c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * @param field the calendar field need to check against 666c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * @return TRUE if the 'field' is smaller than all the fields 667c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * covered in pattern. FALSE otherwise. 668c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * @internal ICU 4.0 669c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru */ 670c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UBool isFieldUnitIgnored(UCalendarDateFields field) const; 671c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 672c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 673c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /** 674c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * This is for ICU internal use only. Please do not use. 675c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * Check whether the 'field' is smaller than all the fields covered in 676c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * pattern, return TRUE if it is. The sequence of calendar field, 677c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * from large to small is: ERA, YEAR, MONTH, DATE, AM_PM, HOUR, MINUTE,... 678c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * @param pattern the pattern to check against 679c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * @param field the calendar field need to check against 680c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * @return TRUE if the 'field' is smaller than all the fields 681c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * covered in pattern. FALSE otherwise. 682c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * @internal ICU 4.0 683c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru */ 684c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru static UBool isFieldUnitIgnored(const UnicodeString& pattern, 685c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru UCalendarDateFields field); 686c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 687c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 688c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 689c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /** 690c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * This is for ICU internal use only. Please do not use. 691c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * Get the locale of this simple date formatter. 692c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * It is used in DateIntervalFormat. 693c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * 694c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * @return locale in this simple date formatter 695c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * @internal ICU 4.0 696c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru */ 697c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru const Locale& getSmpFmtLocale(void) const; 698c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 699c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprivate: 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru friend class DateFormat; 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void initializeDefaultCentury(void); 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat(); // default constructor not implemented 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Used by the DateFormat factory methods to construct a SimpleDateFormat. 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param timeStyle the time style. 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param dateStyle the date style. 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param locale the given locale. 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Output param set to success/failure code on 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * exit. 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status); 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Construct a SimpleDateFormat for the given locale. If no resource data 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is available, create an object of last resort, using hard-coded strings. 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This is an internal method, called by DateFormat. It should never fail. 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param locale the given locale. 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Output param set to success/failure code on 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * exit. 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru SimpleDateFormat(const Locale& locale, UErrorCode& status); // Use default pattern 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Called by format() to format a single field. 729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 730b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param appendTo Output parameter to receive result. 731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Result is appended to existing contents. 732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param ch The format character we encountered in the pattern. 733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param count Number of characters in the current pattern symbol (e.g., 734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "yyyy" in the pattern would result in a call to this function 735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with ch equal to 'y' and count equal to 4) 736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pos The FieldPosition being filled in by the format() call. If 737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * this function is formatting the field specfied by pos, it 738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * will fill in pos with the beginning and ending offsets of the 739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * field. 740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Receives a status code, which will be U_ZERO_ERROR if the operation 741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * succeeds. 742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void subFormat( UnicodeString &appendTo, 744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UChar ch, 745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t count, 746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition& pos, 747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar& cal, 748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& status) const; // in case of illegal argument 749b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 750b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 751b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Used by subFormat() to format a numeric value. 752b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Appends to toAppendTo a string representation of "value" 753b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * having a number of digits between "minDigits" and 754b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "maxDigits". Uses the DateFormat's NumberFormat. 755b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 756b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param appendTo Output parameter to receive result. 757b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Formatted number is appended to existing contents. 758b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param value Value to format. 759b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param minDigits Minimum number of digits the result should have 760b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param maxDigits Maximum number of digits the result should have 761b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 762b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru void zeroPaddingNumber( NumberFormat *currentNumberFormat, 763b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString &appendTo, 764b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t value, 765b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t minDigits, 766b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t maxDigits) const; 767b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 768b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 769b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Return true if the given format character, occuring count 770b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * times, represents a numeric field. 771b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 772b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static UBool isNumeric(UChar formatChar, int32_t count); 773b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 774b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * initializes fCalendar from parameters. Returns fCalendar as a convenience. 776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param adoptZone Zone to be adopted, or NULL for TimeZone::createDefault(). 777b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param locale Locale of the calendar 778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Error code 779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the newly constructed fCalendar 780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Calendar *initializeCalendar(TimeZone* adoptZone, const Locale& locale, UErrorCode& status); 782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * initializes fSymbols from parameters. 785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param locale Locale of the symbols 786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param calendar Alias to Calendar that will be used. 787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Error code 788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void initializeSymbols(const Locale& locale, Calendar* calendar, UErrorCode& status); 790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Called by several of the constructors to load pattern data and formatting symbols 793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * out of a resource bundle and initialize the locale based on it. 794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param timeStyle The time style, as passed to DateFormat::createDateInstance(). 795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param dateStyle The date style, as passed to DateFormat::createTimeInstance(). 796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param locale The locale to load the patterns from. 797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Filled in with an error code if loading the data from the 798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * resources fails. 799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void construct(EStyle timeStyle, EStyle dateStyle, const Locale& locale, UErrorCode& status); 801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Called by construct() and the various constructors to set up the SimpleDateFormat's 804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Calendar and NumberFormat objects. 805b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param locale The locale for which we want a Calendar and a NumberFormat. 806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param statuc Filled in with an error code if creating either subobject fails. 807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void initialize(const Locale& locale, UErrorCode& status); 809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 811b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Private code-size reduction function used by subParse. 812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param text the time text being parsed. 813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param start where to start parsing. 814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param field the date field being parsed. 815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param stringArray the string array to parsed. 816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param stringArrayCount the size of the array. 817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param cal a Calendar set to the date and time to be formatted 818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * into a date/time string. 819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the new start position if matching succeeded; a negative number 820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * indicating matching failure, otherwise. 821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchString(const UnicodeString& text, int32_t start, UCalendarDateFields field, 823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const; 824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 825b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 826b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Private code-size reduction function used by subParse. 827b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param text the time text being parsed. 828b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param start where to start parsing. 829b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param field the date field being parsed. 830b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param stringArray the string array to parsed. 831b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param stringArrayCount the size of the array. 832b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param cal a Calendar set to the date and time to be formatted 833b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * into a date/time string. 834b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the new start position if matching succeeded; a negative number 835b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * indicating matching failure, otherwise. 836b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 837b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t matchQuarterString(const UnicodeString& text, int32_t start, UCalendarDateFields field, 838b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString* stringArray, int32_t stringArrayCount, Calendar& cal) const; 839b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 840b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 841b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Private member function that converts the parsed date strings into 842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * timeFields. Returns -start (for ParsePosition) if failed. 843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param text the time text to be parsed. 844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param start where to start parsing. 845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param ch the pattern character for the date field text to be parsed. 846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param count the count of a pattern character. 847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param obeyCount if true then the count is strictly obeyed. 848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param ambiguousYear If true then the two-digit year == the default start year. 849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param cal a Calendar set to the date and time to be formatted 850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * into a date/time string. 851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the new start position if matching succeeded; a negative number 852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * indicating matching failure, otherwise. 853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t subParse(const UnicodeString& text, int32_t& start, UChar ch, int32_t count, 855b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UBool obeyCount, UBool allowNegative, UBool ambiguousYear[], Calendar& cal, 856b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t patLoc) const; 857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void parseInt(const UnicodeString& text, 859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable& number, 860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition& pos, 861b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UBool allowNegative, 862b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat *fmt) const; 863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void parseInt(const UnicodeString& text, 865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Formattable& number, 866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t maxDigits, 867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsePosition& pos, 868b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UBool allowNegative, 869b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat *fmt) const; 870b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 871b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t checkIntSuffix(const UnicodeString& text, int32_t start, 872b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t patLoc, UBool isNegative) const; 873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Translate a pattern, mapping each character in the from string to the 876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * corresponding character in the to string. Return an error if the original 877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * pattern contains an unmapped character, or if a quote is unmatched. 878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Quoted (single quotes only) material is not translated. 879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param originalPattern the original pattern. 880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param translatedPattern Output param to receive the translited pattern. 881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param from the characters to be translited from. 882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param to the characters to be translited to. 883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Receives a status code, which will be U_ZERO_ERROR 884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * if the operation succeeds. 885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static void translatePattern(const UnicodeString& originalPattern, 887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& translatedPattern, 888b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString& from, 889b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const UnicodeString& to, 890b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& status); 891b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 892b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 893b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Sets the starting date of the 100-year window that dates with 2-digit years 894b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * are considered to fall within. 895b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param startDate the start date 896b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status Receives a status code, which will be U_ZERO_ERROR 897b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * if the operation succeeds. 898b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 899b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void parseAmbiguousDatesAsAfter(UDate startDate, UErrorCode& status); 900b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 901b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 902b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Return the length matched by the given affix, or -1 if none. 903b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Runs of white space in the affix, match runs of white space in 904b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * the input. 905b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param affix pattern string, taken as a literal 906b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param input input text 907b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @param pos offset into input at which to begin matching 908b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * @return length of input that matches, or -1 if match failure 909b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 910b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t compareSimpleAffix(const UnicodeString& affix, 911b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru const UnicodeString& input, 912b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t pos) const; 913b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 914b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 915b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Skip over a run of zero or more isRuleWhiteSpace() characters at 916b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * pos in text. 917b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 918b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t skipRuleWhiteSpace(const UnicodeString& text, int32_t pos) const; 919b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 920b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 921b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Skip over a run of zero or more isUWhiteSpace() characters at pos 922b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * in text. 923b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 924b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t skipUWhiteSpace(const UnicodeString& text, int32_t pos) const; 925b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 926b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 927b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Private methods for formatting/parsing GMT string 928b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 929b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru void appendGMT(NumberFormat *currentNumberFormat,UnicodeString &appendTo, Calendar& cal, UErrorCode& status) const; 930b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru void formatGMTDefault(NumberFormat *currentNumberFormat,UnicodeString &appendTo, int32_t offset) const; 931b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t parseGMT(const UnicodeString &text, ParsePosition &pos) const; 932b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int32_t parseGMTDefault(const UnicodeString &text, ParsePosition &pos) const; 933b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool isDefaultGMTFormat() const; 934b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 935b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void formatRFC822TZ(UnicodeString &appendTo, int32_t offset) const; 936b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 937b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 938b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Initialize MessageFormat instances used for GMT formatting/parsing 939b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 940b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru void initGMTFormatters(UErrorCode &status); 941b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 942b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 943b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Initialize NumberFormat instances used for numbering system overrides. 944b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 945b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru void initNumberFormatters(const Locale &locale,UErrorCode &status); 946b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 947b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 948b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Get the numbering system to be used for a particular field. 949b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 950b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat * getNumberFormat(UDateFormatField index) const; 951b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 952b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 953b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * Parse the given override string and set up structures for number formats 954b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 955b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru void processOverrideString(const Locale &locale, const UnicodeString &str, int8_t type, UErrorCode &status); 956b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 957b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 958b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Used to map pattern characters to Calendar field identifiers. 959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UCalendarDateFields fgPatternIndexToCalendarField[]; 961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Map index into pattern character string to DateFormat field number 964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru static const UDateFormatField fgPatternIndexToDateFormatField[]; 966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 968c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * Used to map Calendar field to field level. 969c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * The larger the level, the smaller the field unit. 970c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * For example, UCAL_ERA level is 0, UCAL_YEAR level is 10, 971c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * UCAL_MONTH level is 20. 972c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru */ 973c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru static const int32_t fgCalendarFieldToLevel[]; 974c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru static const int32_t fgPatternCharToLevel[]; 975c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru 976c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru /** 977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The formatting pattern for this formatter. 978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString fPattern; 980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 982b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * The numbering system override for dates. 983b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 984b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString fDateOverride; 985b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 986b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 987b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru * The numbering system override for times. 988b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru */ 989b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru UnicodeString fTimeOverride; 990b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 991b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 992b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru /** 993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The original locale used (for reloading symbols) 994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru Locale fLocale; 996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A pointer to an object containing the strings to use in formatting (e.g., 999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * month and day names, AM and PM strings, time zone names, etc.) 1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru DateFormatSymbols* fSymbols; // Owned 1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If dates have ambiguous years, we map them into the century starting 1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * at defaultCenturyStart, which may be any date. If defaultCenturyStart is 1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * set to SYSTEM_DEFAULT_CENTURY, which it is by default, then the system 1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * values are used. The instance values defaultCenturyStart and 1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * defaultCenturyStartYear are only used if explicitly set by the user 1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * through the API method parseAmbiguousDatesAsAfter(). 1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UDate fDefaultCenturyStart; 1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /** 1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * See documentation for defaultCenturyStart. 1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /*transient*/ int32_t fDefaultCenturyStartYear; 1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru enum ParsedTZType { 1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TZTYPE_UNK, 1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TZTYPE_STD, 1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru TZTYPE_DST 1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru }; 1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ParsedTZType tztype; // here to avoid api change 1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1026b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru typedef struct NSOverride { 1027b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat *nf; 1028b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t hash; 1029b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NSOverride *next; 1030b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru } NSOverride; 1031b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * MessageFormat instances used for localized GMT format 1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 1035b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru enum { 1036b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru kGMTNegativeHMS = 0, 1037b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru kGMTNegativeHM, 1038b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru kGMTPositiveHMS, 1039b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru kGMTPositiveHM, 1040b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1041b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru kNumGMTFormatters 1042b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 1043b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru enum { 1044b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru kGMTNegativeHMSMinLenIdx = 0, 1045b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru kGMTPositiveHMSMinLenIdx, 1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1047b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru kNumGMTFormatMinLengths 1048b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru }; 1049b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1050b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru MessageFormat **fGMTFormatters; 1051b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // If a GMT hour format has a second field, we need to make sure 1052b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // the length of input localized GMT string must match the expected 1053b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // length. Otherwise, sub DateForamt handling offset format may 1054b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // unexpectedly success parsing input GMT string without second field. 1055b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // See #6880 about this issue. 1056b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // TODO: SimpleDateFormat should provide an option to invalidate 1057b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru // 1058b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru int32_t fGMTFormatHmsMinLen[kNumGMTFormatMinLengths]; 1059b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1060b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NumberFormat **fNumberFormatters; 1061b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1062b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru NSOverride *fOverrideList; 1063b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru 1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UBool fHaveDefaultCentury; 1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UDate 1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruSimpleDateFormat::get2DigitYearStart(UErrorCode& /*status*/) const 1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru{ 1070b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return fDefaultCenturyStart; 1071b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1072b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UnicodeString& 1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruSimpleDateFormat::format(const Formattable& obj, 1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& appendTo, 1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UErrorCode& status) const { 1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Don't use Format:: - use immediate base class only, 1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // in case immediate base modifies behavior later. 1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return DateFormat::format(obj, appendTo, status); 1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1081b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UnicodeString& 1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruSimpleDateFormat::format(UDate date, 1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UnicodeString& appendTo, 1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru FieldPosition& fieldPosition) const { 1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // Don't use Format:: - use immediate base class only, 1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru // in case immediate base modifies behavior later. 1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return DateFormat::format(date, appendTo, fieldPosition); 1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruinline UnicodeString& 1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruSimpleDateFormat::format(UDate date, UnicodeString& appendTo) const { 1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return DateFormat::format(date, appendTo); 1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END 1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif // _SMPDTFMT 1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof 1102