1c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott/* 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ******************************************************************************* 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * Copyright (C) 1997-2008, International Business Machines Corporation and * 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * others. All Rights Reserved. * 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ******************************************************************************* 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * 7c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * File DATEFMT.CPP 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * Modification History: 10c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * 11c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * Date Name Description 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * 02/19/97 aliu Converted from java. 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * 03/31/97 aliu Modified extensively to work with 50 locales. 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * 04/01/97 aliu Added support for centuries. 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * 08/12/97 aliu Fixed operator== to use Calendar::equivalentTo. 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott * 07/20/98 stephen Changed ParsePosition initialization 17c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ******************************************************************************** 18c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott */ 19c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 20c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "unicode/utypes.h" 21c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 22c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if !UCONFIG_NO_FORMATTING 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "unicode/ures.h" 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "unicode/datefmt.h" 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "unicode/smpdtfmt.h" 27c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "unicode/dtptngen.h" 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "reldtfmt.h" 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "cstring.h" 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "windtfmt.h" 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if defined( U_DEBUG_CALSVC ) || defined (U_DEBUG_CAL) 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include <stdio.h> 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// ***************************************************************************** 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// class DateFormat 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// ***************************************************************************** 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottU_NAMESPACE_BEGIN 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 43c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::DateFormat() 44c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott: fCalendar(0), 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fNumberFormat(0) 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::DateFormat(const DateFormat& other) 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott: Format(other), 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fCalendar(0), 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fNumberFormat(0) 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott *this = other; 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat& DateFormat::operator=(const DateFormat& other) 62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (this != &other) 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delete fCalendar; 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delete fNumberFormat; 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if(other.fCalendar) { 68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fCalendar = other.fCalendar->clone(); 69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } else { 70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fCalendar = NULL; 71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if(other.fNumberFormat) { 73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fNumberFormat = (NumberFormat*)other.fNumberFormat->clone(); 74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } else { 75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fNumberFormat = NULL; 76c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 77c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return *this; 79c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 81c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 82c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 83c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::~DateFormat() 84c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 85c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delete fCalendar; 86c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delete fNumberFormat; 87c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 88c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 89c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 90c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 91c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottUBool 92c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::operator==(const Format& other) const 93c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 94c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // This protected comparison operator should only be called by subclasses 95c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // which have confirmed that the other object being compared against is 96c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // an instance of a sublcass of DateFormat. THIS IS IMPORTANT. 97c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 98c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Format::operator== guarantees that this cast is safe 99c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott DateFormat* fmt = (DateFormat*)&other; 100c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 101c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return (this == fmt) || 102c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (Format::operator==(other) && 103c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fCalendar&&(fCalendar->isEquivalentTo(*fmt->fCalendar)) && 104c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott (fNumberFormat && *fNumberFormat == *fmt->fNumberFormat)); 105c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 106c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 107c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 108c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 109c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottUnicodeString& 110c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::format(const Formattable& obj, 111c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott UnicodeString& appendTo, 112c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott FieldPosition& fieldPosition, 113c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott UErrorCode& status) const 114c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 115c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (U_FAILURE(status)) return appendTo; 116c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 117c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // if the type of the Formattable is double or long, treat it as if it were a Date 118c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott UDate date = 0; 119c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott switch (obj.getType()) 120c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott case Formattable::kDate: 122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott date = obj.getDate(); 123c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott break; 124c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott case Formattable::kDouble: 125c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott date = (UDate)obj.getDouble(); 126c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott break; 127c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott case Formattable::kLong: 128c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott date = (UDate)obj.getLong(); 129c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott break; 130c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott default: 131c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott status = U_ILLEGAL_ARGUMENT_ERROR; 132c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return appendTo; 133c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 134c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 135c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Is this right? 136c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott //if (fieldPosition.getBeginIndex() == fieldPosition.getEndIndex()) 137c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // status = U_ILLEGAL_ARGUMENT_ERROR; 138c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 139c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return format(date, appendTo, fieldPosition); 140c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 141c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 142c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 143c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 144c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottUnicodeString& 145c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::format(UDate date, UnicodeString& appendTo, FieldPosition& fieldPosition) const { 146c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (fCalendar != NULL) { 147c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Use our calendar instance 148c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott UErrorCode ec = U_ZERO_ERROR; 149c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fCalendar->setTime(date, ec); 150c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (U_SUCCESS(ec)) { 151c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return format(*fCalendar, appendTo, fieldPosition); 152c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 153c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 154c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return appendTo; 155c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 156c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 157c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 158c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 159c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottUnicodeString& 160c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::format(UDate date, UnicodeString& appendTo) const 161c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 162c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Note that any error information is just lost. That's okay 163c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // for this convenience method. 164c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott FieldPosition fpos(0); 165c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return format(date, appendTo, fpos); 166c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 167c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 168c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 169c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 170c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottUDate 171c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::parse(const UnicodeString& text, 172c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ParsePosition& pos) const 173c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 174c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott UDate d = 0; // Error return UDate is 0 (the epoch) 175c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (fCalendar != NULL) { 176c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int32_t start = pos.getIndex(); 177c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 178c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Parse may update TimeZone used by the calendar. 179c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott TimeZone *tzsav = (TimeZone*)fCalendar->getTimeZone().clone(); 180c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 181c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fCalendar->clear(); 182c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott parse(text, *fCalendar, pos); 183c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (pos.getIndex() != start) { 184c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott UErrorCode ec = U_ZERO_ERROR; 185c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott d = fCalendar->getTime(ec); 186c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (U_FAILURE(ec)) { 187c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // We arrive here if fCalendar is non-lenient and there 188c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // is an out-of-range field. We don't know which field 189c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // was illegal so we set the error index to the start. 190c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott pos.setIndex(start); 191c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott pos.setErrorIndex(start); 192c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott d = 0; 193c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 194c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 195c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 196c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Restore TimeZone 197c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fCalendar->adoptTimeZone(tzsav); 198c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 199c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return d; 200c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 201c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 202c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 203c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 204c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottUDate 205c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::parse(const UnicodeString& text, 206c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott UErrorCode& status) const 207c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 208c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (U_FAILURE(status)) return 0; 209c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 210c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ParsePosition pos(0); 211c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott UDate result = parse(text, pos); 212c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (pos.getIndex() == 0) { 213c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#if defined (U_DEBUG_CAL) 214c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fprintf(stderr, "%s:%d - - failed to parse - err index %d\n" 215c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott , __FILE__, __LINE__, pos.getErrorIndex() ); 216c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 217c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott status = U_ILLEGAL_ARGUMENT_ERROR; 218c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 219c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return result; 220c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 221c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 222c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 223c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 224c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid 225c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::parseObject(const UnicodeString& source, 226c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Formattable& result, 227c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott ParsePosition& pos) const 228c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 229c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott result.setDate(parse(source, pos)); 230c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 231c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 232c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 233c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 234c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat* U_EXPORT2 235c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::createTimeInstance(DateFormat::EStyle style, 236c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const Locale& aLocale) 237c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 238c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return create(style, kNone, aLocale); 239c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 240c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 241c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 242c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 243c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat* U_EXPORT2 244c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::createDateInstance(DateFormat::EStyle style, 245c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const Locale& aLocale) 246c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 247c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // +4 to set the correct index for getting data out of 248c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // LocaleElements. 249c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if(style != kNone) 250c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 251c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott style = (EStyle) (style + kDateOffset); 252c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 253c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return create(kNone, (EStyle) (style), aLocale); 254c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 255c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 256c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 257c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 258c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat* U_EXPORT2 259c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::createDateTimeInstance(EStyle dateStyle, 260c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott EStyle timeStyle, 261c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott const Locale& aLocale) 262c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 263c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if(dateStyle != kNone) 264c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott { 265c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott dateStyle = (EStyle) (dateStyle + kDateOffset); 266c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 267c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return create(timeStyle, dateStyle, aLocale); 268c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 269c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 270c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 271c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 272c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat* U_EXPORT2 273c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::createInstance() 274c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 275c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return create(kShort, (EStyle) (kShort + kDateOffset), Locale::getDefault()); 276c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 277c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 278c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 279c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 280c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat* U_EXPORT2 281c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::create(EStyle timeStyle, EStyle dateStyle, const Locale& locale) 282c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 283c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott UErrorCode status = U_ZERO_ERROR; 284c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifdef U_WINDOWS 285c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott char buffer[8]; 286c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int32_t count = locale.getKeywordValue("compat", buffer, sizeof(buffer), status); 287c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 288c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // if the locale has "@compat=host", create a host-specific DateFormat... 289c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (count > 0 && uprv_strcmp(buffer, "host") == 0) { 290c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Win32DateFormat *f = new Win32DateFormat(timeStyle, dateStyle, locale, status); 291c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 292c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (U_SUCCESS(status)) { 293c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return f; 294c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 295c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 296c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delete f; 297c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 298c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif 299c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 300c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // is it relative? 301c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if(/*((timeStyle!=UDAT_NONE)&&(timeStyle & UDAT_RELATIVE)) || */((dateStyle!=kNone)&&((dateStyle-kDateOffset) & UDAT_RELATIVE))) { 302c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott RelativeDateFormat *r = new RelativeDateFormat((UDateFormatStyle)timeStyle, (UDateFormatStyle)(dateStyle-kDateOffset), locale, status); 303c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if(U_SUCCESS(status)) return r; 304c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delete r; 305c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott status = U_ZERO_ERROR; 306c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 307c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 308c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Try to create a SimpleDateFormat of the desired style. 309c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott SimpleDateFormat *f = new SimpleDateFormat(timeStyle, dateStyle, locale, status); 310c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (U_SUCCESS(status)) return f; 311c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delete f; 312c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 313c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // If that fails, try to create a format using the default pattern and 314c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // the DateFormatSymbols for this locale. 315c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott status = U_ZERO_ERROR; 316c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott f = new SimpleDateFormat(locale, status); 317c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (U_SUCCESS(status)) return f; 318c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delete f; 319c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 320c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // This should never really happen, because the preceding constructor 321c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // should always succeed. If the resource data is unavailable, a last 322c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // resort object should be returned. 323c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return 0; 324c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 325c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 326c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 327c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 328c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottconst Locale* U_EXPORT2 329c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::getAvailableLocales(int32_t& count) 330c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 331c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Get the list of installed locales. 332c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Even if root has the correct date format for this locale, 333c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // it's still a valid locale (we don't worry about data fallbacks). 334c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return Locale::getAvailableLocales(count); 335c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 336c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 337c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 338c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 339c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid 340c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::adoptCalendar(Calendar* newCalendar) 341c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 342c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delete fCalendar; 343c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fCalendar = newCalendar; 344c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 345c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 346c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 347c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid 348c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::setCalendar(const Calendar& newCalendar) 349c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 350c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott Calendar* newCalClone = newCalendar.clone(); 351c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (newCalClone != NULL) { 352c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott adoptCalendar(newCalClone); 353c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 354c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 355c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 356c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 357c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 358c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottconst Calendar* 359c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::getCalendar() const 360c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 361c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return fCalendar; 362c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 363c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 364c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 365c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 366c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid 367c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::adoptNumberFormat(NumberFormat* newNumberFormat) 368c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 369c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott delete fNumberFormat; 370c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fNumberFormat = newNumberFormat; 371c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott newNumberFormat->setParseIntegerOnly(TRUE); 372c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 373c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 374c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 375c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid 376c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::setNumberFormat(const NumberFormat& newNumberFormat) 377c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 378c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott NumberFormat* newNumFmtClone = (NumberFormat*)newNumberFormat.clone(); 379c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (newNumFmtClone != NULL) { 380c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott adoptNumberFormat(newNumFmtClone); 381c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 382c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 383c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 384c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 385c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 386c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottconst NumberFormat* 387c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::getNumberFormat() const 388c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 389c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return fNumberFormat; 390c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 391c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 392c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 393c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 394c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid 395c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::adoptTimeZone(TimeZone* zone) 396c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 397c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (fCalendar != NULL) { 398c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fCalendar->adoptTimeZone(zone); 399c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 400c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 401c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 402c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 403c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid 404c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::setTimeZone(const TimeZone& zone) 405c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 406c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (fCalendar != NULL) { 407c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fCalendar->setTimeZone(zone); 408c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 409c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 410c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 411c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 412c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 413c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottconst TimeZone& 414c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::getTimeZone() const 415c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 416c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (fCalendar != NULL) { 417c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return fCalendar->getTimeZone(); 418c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 419c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // If calendar doesn't exists, create default timezone. 420c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // fCalendar is rarely null 421c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return *(TimeZone::createDefault()); 422c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 423c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 424c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 425c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 426c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottvoid 427c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::setLenient(UBool lenient) 428c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 429c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (fCalendar != NULL) { 430c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott fCalendar->setLenient(lenient); 431c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 432c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 433c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 434c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//---------------------------------------------------------------------- 435c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 436c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottUBool 437c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottDateFormat::isLenient() const 438c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott{ 439c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott if (fCalendar != NULL) { 440c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return fCalendar->isLenient(); 441c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 442c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // fCalendar is rarely null 443c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott return FALSE; 444c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} 445c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 446c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick ScottU_NAMESPACE_END 447c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 448c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif /* #if !UCONFIG_NO_FORMATTING */ 449c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 450c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott//eof 451