16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2005-2013, International Business Machines 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* File WINDTFMT.H 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************** 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef __WINDTFMT 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define __WINDTFMT 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_PLATFORM_HAS_WIN32_API 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/format.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/datefmt.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/calendar.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustring.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/locid.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C++ API: Format dates using Windows API. 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CDECL_BEGIN 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org// Forward declarations for Windows types... 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct _SYSTEMTIME SYSTEMTIME; 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef struct _TIME_ZONE_INFORMATION TIME_ZONE_INFORMATION; 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_CDECL_END 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgclass Win32DateFormat : public DateFormat 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgpublic: 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Win32DateFormat(DateFormat::EStyle timeStyle, DateFormat::EStyle dateStyle, const Locale &locale, UErrorCode &status); 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Win32DateFormat(const Win32DateFormat &other); 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual ~Win32DateFormat(); 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual Format *clone(void) const; 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Win32DateFormat &operator=(const Win32DateFormat &other); 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString &format(Calendar &cal, UnicodeString &appendTo, FieldPosition &pos) const; 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString& format(UDate date, UnicodeString& appendTo) const; 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void parse(const UnicodeString& text, Calendar& cal, ParsePosition& pos) const; 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set the calendar to be used by this date format. Initially, the default 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * calendar for the specified or default locale is used. The caller should 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * not delete the Calendar object after it is adopted by this call. 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param calendarToAdopt Calendar object to be adopted. 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void adoptCalendar(Calendar* calendarToAdopt); 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set the calendar to be used by this date format. Initially, the default 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * calendar for the specified or default locale is used. 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param newCalendar Calendar object to be set. 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void setCalendar(const Calendar& newCalendar); 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the time zone for the calendar of this DateFormat object. The caller 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * no longer owns the TimeZone object and should not delete it after this call. 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param zoneToAdopt the TimeZone to be adopted. 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void adoptTimeZone(TimeZone* zoneToAdopt); 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the time zone for the calendar of this DateFormat object. 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param zone the new time zone. 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual void setTimeZone(const TimeZone& zone); 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the class ID for this class. This is useful only for comparing to 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a return value from getDynamicClassID(). For example: 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <pre> 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * . Base* polymorphic_pointer = createPolymorphicObject(); 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * . if (polymorphic_pointer->getDynamicClassID() == 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * . erived::getStaticClassID()) ... 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </pre> 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The class ID for all objects of this class. 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_I18N_API static UClassID U_EXPORT2 getStaticClassID(void); 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * method is to implement a simple version of RTTI, since not all C++ 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * compilers support genuine RTTI. Polymorphic operator==() and clone() 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * methods call this method. 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The class ID for this object. All objects of a 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * given class have the same class ID. Objects of 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * other classes have different class IDs. 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org virtual UClassID getDynamicClassID(void) const; 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgprivate: 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void formatDate(const SYSTEMTIME *st, UnicodeString &appendTo) const; 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org void formatTime(const SYSTEMTIME *st, UnicodeString &appendTo) const; 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString setTimeZoneInfo(TIME_ZONE_INFORMATION *tzi, const TimeZone &zone) const; 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString* getTimeDateFormat(const Calendar *cal, const Locale *locale, UErrorCode &status) const; 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString *fDateTimeMsg; 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormat::EStyle fTimeStyle; 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org DateFormat::EStyle fDateStyle; 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org Locale fLocale; 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t fLCID; 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UnicodeString fZoneID; 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org TIME_ZONE_INFORMATION *fTZI; 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orginline UnicodeString &Win32DateFormat::format(UDate date, UnicodeString& appendTo) const { 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return DateFormat::format(date, appendTo); 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */ 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // U_PLATFORM_HAS_WIN32_API 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif // __WINDTFMT 141