ICU-887 add new ucal_ time zone API

X-SVN-Rev: 11249
This commit is contained in:
Alan Liu 2003-03-05 18:36:48 +00:00
parent efda501285
commit 03c212daf4
3 changed files with 631 additions and 462 deletions

View File

@ -13,6 +13,7 @@
#include "unicode/uloc.h"
#include "unicode/calendar.h"
#include "unicode/timezone.h"
#include "unicode/simpletz.h"
#include "unicode/ustring.h"
#include "unicode/strenum.h"
#include "cmemory.h"
@ -20,9 +21,67 @@
U_NAMESPACE_USE
static TimeZone*
_createTimeZone(const UChar* zoneID, int32_t len, UErrorCode* ec) {
TimeZone* zone = NULL;
if (ec!=NULL && U_SUCCESS(*ec)) {
// Note that if zoneID is invalid, we get back GMT. This odd
// behavior is by design and goes back to the JDK. The only
// failure we will see is a memory allocation failure.
int32_t l = (len<0 ? u_strlen(zoneID) : len);
zone = TimeZone::createTimeZone(UnicodeString(zoneID, l));
if (zone == NULL) {
*ec = U_MEMORY_ALLOCATION_ERROR;
}
}
return zone;
}
U_CAPI UEnumeration* U_EXPORT2
ucal_openTimeZoneEnumeration(int32_t rawOffset, UErrorCode* ec) {
return uenum_openStringEnumeration(TimeZone::createEnumeration(rawOffset), ec);
ucal_openTimeZones(UErrorCode* ec) {
return uenum_openStringEnumeration(TimeZone::createEnumeration(), ec);
}
U_CAPI UEnumeration* U_EXPORT2
ucal_openCountryTimeZones(const char* country, UErrorCode* ec) {
return uenum_openStringEnumeration(TimeZone::createEnumeration(country), ec);
}
U_CAPI int32_t U_EXPORT2
ucal_getDefaultTimeZone(UChar* result, int32_t resultCapacity, UErrorCode* ec) {
int32_t len = 0;
if (ec!=NULL && U_SUCCESS(*ec)) {
TimeZone* zone = TimeZone::createDefault();
if (zone == NULL) {
*ec = U_MEMORY_ALLOCATION_ERROR;
} else {
UnicodeString id;
zone->getID(id);
delete zone;
len = id.extract(result, resultCapacity, *ec);
}
}
return len;
}
U_CAPI void U_EXPORT2
ucal_setDefaultTimeZone(const UChar* zoneID, UErrorCode* ec) {
TimeZone* zone = _createTimeZone(zoneID, -1, ec);
if (zone != NULL) {
TimeZone::adoptDefault(zone);
}
}
U_CAPI int32_t U_EXPORT2
ucal_getDSTSavings(const UChar* zoneID, UErrorCode* ec) {
int32_t result = 0;
TimeZone* zone = _createTimeZone(zoneID, -1, ec);
if (U_SUCCESS(*ec) &&
zone->getDynamicClassID() == SimpleTimeZone::getStaticClassID()) {
result = ((SimpleTimeZone*) zone)->getDSTSavings();
}
delete zone;
return result;
}
U_CAPI const UChar* U_EXPORT2
@ -89,18 +148,11 @@ ucal_open( const UChar* zoneID,
if(U_FAILURE(*status)) return 0;
TimeZone *zone = 0;
if(zoneID == 0) {
zone = TimeZone::createDefault();
}
else {
int32_t length = (len == -1 ? u_strlen(zoneID) : len);
TimeZone* zone = (zoneID==NULL) ? TimeZone::createDefault()
: _createTimeZone(zoneID, len, status);
zone = TimeZone::createTimeZone(UnicodeString(zoneID, length));
}
if(zone == 0) {
*status = U_MEMORY_ALLOCATION_ERROR;
return 0;
if (U_FAILURE(*status)) {
return NULL;
}
return (UCalendar*)Calendar::createInstance(zone, Locale(locale), *status);
@ -123,21 +175,12 @@ ucal_setTimeZone( UCalendar* cal,
if(U_FAILURE(*status))
return;
TimeZone *zone;
if(zoneID == NULL) {
zone = TimeZone::createDefault();
}
else {
int32_t length = (len == -1 ? u_strlen(zoneID) : len);
zone = TimeZone::createTimeZone(UnicodeString((UChar*)zoneID,
length, length));
}
if(zone == 0) {
*status = U_MEMORY_ALLOCATION_ERROR;
return;
}
TimeZone* zone = (zoneID==NULL) ? TimeZone::createDefault()
: _createTimeZone(zoneID, len, status);
if (zone != NULL) {
((Calendar*)cal)->adoptTimeZone(zone);
}
}
U_CAPI int32_t U_EXPORT2

View File

@ -280,98 +280,142 @@ enum UCalendarAMPMs {
typedef enum UCalendarAMPMs UCalendarAMPMs;
/**
* Create a UEnumeration over the recognized time zone IDs with the
* given raw offset.
* @param rawOffset the desired GMT offset, not including the effects
* of daylight savings time
* Create an enumeration over all time zones.
*
* @param ec input/output error code
*
* @return an enumeration object that the caller must dispose of using
* uenum_close()
* @draft ICU 2.4
* uenum_close(), or NULL upon failure. In case of failure *ec will
* indicate the error.
*
* @draft ICU 2.6
*/
U_CAPI UEnumeration* U_EXPORT2
ucal_openTimeZoneEnumeration(int32_t rawOffset,
UErrorCode* status);
ucal_openTimeZones(UErrorCode* ec);
/**
* Get an available TimeZone ID.
* A Timezone ID is a string of the form "America/Los Angeles".
* @param rawOffset The desired GMT offset
* @param index The index of the desired TimeZone.
* @param status A pointer to an UErrorCode to receive any errors
* @return The requested TimeZone ID, or 0 if not found
* @see ucal_countAvailableTZIDs
* @obsolete ICU 2.8. Use ucal_openTimeZoneEnumeration instead since this API will be removed in that release.
*/
U_CAPI const UChar* U_EXPORT2
ucal_getAvailableTZIDs( int32_t rawOffset,
int32_t index,
UErrorCode* status);
* Create an enumeration over all time zones associated with the given
* country. Some zones are affiliated with no country (e.g., "UTC");
* these may also be retrieved, as a group.
*
* @param country the ISO 3166 two-letter country code, or NULL to
* retrieve zones not affiliated with any country
*
* @param ec input/output error code
*
* @return an enumeration object that the caller must dispose of using
* uenum_close(), or NULL upon failure. In case of failure *ec will
* indicate the error.
*
* @draft ICU 2.6
*/
U_CAPI UEnumeration* U_EXPORT2
ucal_openCountryTimeZones(const char* country, UErrorCode* ec);
/**
* Determine how many TimeZones exist with a certain offset.
* This function is most useful as determining the loop ending condition for
* calls to \Ref{ucal_getAvailableTZIDs}.
* @param rawOffset The desired GMT offset.
* @return The number of TimeZones with rawOffset.
* @see ucal_getAvailableTZIDs
* @obsolete ICU 2.8. Use ucal_openTimeZoneEnumeration instead since this API will be removed in that release.
*/
* Return the default time zone. The default is determined initially
* by querying the host operating system. It may be changed with
* ucal_setDefaultTimeZone() or with the C++ TimeZone API.
*
* @param result a buffer to receive the result, or NULL
*
* @param resultLength the length of the result buffer
*
* @param ec input/output error code
*
* @return the result string length, not including the terminating
* null
*
* @draft ICU 2.6
*/
U_CAPI int32_t U_EXPORT2
ucal_countAvailableTZIDs(int32_t rawOffset);
ucal_getDefaultTimeZone(UChar* result, int32_t resultCapacity, UErrorCode* ec);
/**
* Get the current date and time.
* The value returned is represented as milliseconds from the epoch.
* @return The current date and time.
* @stable ICU 2.0
*/
* Set the default time zone.
*
* @param zoneID null-terminated time zone ID
*
* @param ec input/output error code
*
* @draft ICU 2.6
*/
U_CAPI void U_EXPORT2
ucal_setDefaultTimeZone(const UChar* zoneID, UErrorCode* ec);
/**
* Return the amount of time in milliseconds that the clock is
* advanced during daylight savings time for the given time zone, or
* zero if the time zone does not observe daylight savings time.
*
* @param zoneID null-terminated time zone ID
*
* @param ec input/output error code
*
* @return the number of milliseconds the time is advanced with
* respect to standard time when the daylight savings rules are in
* effect. This is always a non-negative number, most commonly either
* 3,600,000 (one hour) or zero.
*
* @draft ICU 2.6
*/
U_CAPI int32_t U_EXPORT2
ucal_getDSTSavings(const UChar* zoneID, UErrorCode* ec);
/**
* Get the current date and time.
* The value returned is represented as milliseconds from the epoch.
* @return The current date and time.
* @stable ICU 2.0
*/
U_CAPI UDate U_EXPORT2
ucal_getNow(void);
/**
* Open a UCalendar.
* A UCalendar may be used to convert a millisecond value to a year,
* month, and day.
* @param zoneID The desired TimeZone ID. If 0, use the default time zone.
* @param len The length of zoneID, or -1 if null-terminated.
* @param locale The desired locale
* @param type The type of UCalendar to open.
* @param status A pointer to an UErrorCode to receive any errors
* @return A pointer to a UCalendar, or 0 if an error occurred.
* @stable ICU 2.0
*/
* Open a UCalendar.
* A UCalendar may be used to convert a millisecond value to a year,
* month, and day.
* @param zoneID The desired TimeZone ID. If 0, use the default time zone.
* @param len The length of zoneID, or -1 if null-terminated.
* @param locale The desired locale
* @param type The type of UCalendar to open.
* @param status A pointer to an UErrorCode to receive any errors
* @return A pointer to a UCalendar, or 0 if an error occurred.
* @stable ICU 2.0
*/
U_CAPI UCalendar* U_EXPORT2
ucal_open( const UChar* zoneID,
ucal_open(const UChar* zoneID,
int32_t len,
const char* locale,
UCalendarType type,
UErrorCode* status);
/**
* Close a UCalendar.
* Once closed, a UCalendar may no longer be used.
* @param cal The UCalendar to close.
* @stable ICU 2.0
*/
* Close a UCalendar.
* Once closed, a UCalendar may no longer be used.
* @param cal The UCalendar to close.
* @stable ICU 2.0
*/
U_CAPI void U_EXPORT2
ucal_close(UCalendar *cal);
/**
* Set the TimeZone used by a UCalendar.
* A UCalendar uses a timezone for converting from Greenwich time to local time.
* @param cal The UCalendar to set.
* @param zoneID The desired TimeZone ID. If 0, use the default time zone.
* @param len The length of zoneID, or -1 if null-terminated.
* @param status A pointer to an UErrorCode to receive any errors.
* @stable ICU 2.0
*/
* Set the TimeZone used by a UCalendar.
* A UCalendar uses a timezone for converting from Greenwich time to local time.
* @param cal The UCalendar to set.
* @param zoneID The desired TimeZone ID. If 0, use the default time zone.
* @param len The length of zoneID, or -1 if null-terminated.
* @param status A pointer to an UErrorCode to receive any errors.
* @stable ICU 2.0
*/
U_CAPI void U_EXPORT2
ucal_setTimeZone( UCalendar* cal,
ucal_setTimeZone(UCalendar* cal,
const UChar* zoneID,
int32_t len,
UErrorCode *status);
UErrorCode* status);
/** Possible formats for a UCalendar's display name
/**
* Possible formats for a UCalendar's display name
* @stable ICU 2.0
*/
enum UCalendarDisplayNameType {
@ -389,39 +433,40 @@ enum UCalendarDisplayNameType {
typedef enum UCalendarDisplayNameType UCalendarDisplayNameType;
/**
* Get the display name for a UCalendar's TimeZone.
* A display name is suitable for presentation to a user.
* @param cal The UCalendar to query.
* @param type The desired display name format; one of UCAL_STANDARD, UCAL_SHORT_STANDARD,
* UCAL_DST, UCAL_SHORT_DST
* @param locale The desired locale for the display name.
* @param result A pointer to a buffer to receive the formatted number.
* @param resultLength The maximum size of result.
* @param status A pointer to an UErrorCode to receive any errors
* @return The total buffer size needed; if greater than resultLength, the output was truncated.
* @stable ICU 2.0
*/
* Get the display name for a UCalendar's TimeZone.
* A display name is suitable for presentation to a user.
* @param cal The UCalendar to query.
* @param type The desired display name format; one of UCAL_STANDARD, UCAL_SHORT_STANDARD,
* UCAL_DST, UCAL_SHORT_DST
* @param locale The desired locale for the display name.
* @param result A pointer to a buffer to receive the formatted number.
* @param resultLength The maximum size of result.
* @param status A pointer to an UErrorCode to receive any errors
* @return The total buffer size needed; if greater than resultLength, the output was truncated.
* @stable ICU 2.0
*/
U_CAPI int32_t U_EXPORT2
ucal_getTimeZoneDisplayName( const UCalendar* cal,
ucal_getTimeZoneDisplayName(const UCalendar* cal,
UCalendarDisplayNameType type,
const char *locale,
const char* locale,
UChar* result,
int32_t resultLength,
UErrorCode* status);
/**
* Determine if a UCalendar is currently in daylight savings time.
* Daylight savings time is not used in all parts of the world.
* @param cal The UCalendar to query.
* @param status A pointer to an UErrorCode to receive any errors
* @return TRUE if cal is currently in daylight savings time, FALSE otherwise
* @stable ICU 2.0
*/
* Determine if a UCalendar is currently in daylight savings time.
* Daylight savings time is not used in all parts of the world.
* @param cal The UCalendar to query.
* @param status A pointer to an UErrorCode to receive any errors
* @return TRUE if cal is currently in daylight savings time, FALSE otherwise
* @stable ICU 2.0
*/
U_CAPI UBool U_EXPORT2
ucal_inDaylightTime( const UCalendar* cal,
ucal_inDaylightTime(const UCalendar* cal,
UErrorCode* status );
/** Types of UCalendar attributes
/**
* Types of UCalendar attributes
* @stable ICU 2.0
*/
enum UCalendarAttribute {
@ -437,137 +482,137 @@ enum UCalendarAttribute {
typedef enum UCalendarAttribute UCalendarAttribute;
/**
* Get a numeric attribute associated with a UCalendar.
* Numeric attributes include the first day of the week, or the minimal numbers
* of days in the first week of the month.
* @param cal The UCalendar to query.
* @param attr The desired attribute; one of UCAL_LENIENT, UCAL_FIRST_DAY_OF_WEEK,
* or UCAL_MINIMAL_DAYS_IN_FIRST_WEEK
* @return The value of attr.
* @see ucal_setAttribute
* @stable ICU 2.0
*/
* Get a numeric attribute associated with a UCalendar.
* Numeric attributes include the first day of the week, or the minimal numbers
* of days in the first week of the month.
* @param cal The UCalendar to query.
* @param attr The desired attribute; one of UCAL_LENIENT, UCAL_FIRST_DAY_OF_WEEK,
* or UCAL_MINIMAL_DAYS_IN_FIRST_WEEK
* @return The value of attr.
* @see ucal_setAttribute
* @stable ICU 2.0
*/
U_CAPI int32_t U_EXPORT2
ucal_getAttribute( const UCalendar* cal,
ucal_getAttribute(const UCalendar* cal,
UCalendarAttribute attr);
/**
* Set a numeric attribute associated with a UCalendar.
* Numeric attributes include the first day of the week, or the minimal numbers
* of days in the first week of the month.
* @param cal The UCalendar to set.
* @param attr The desired attribute; one of UCAL_LENIENT, UCAL_FIRST_DAY_OF_WEEK,
* or UCAL_MINIMAL_DAYS_IN_FIRST_WEEK
* @param newValue The new value of attr.
* @see ucal_getAttribute
* @stable ICU 2.0
*/
* Set a numeric attribute associated with a UCalendar.
* Numeric attributes include the first day of the week, or the minimal numbers
* of days in the first week of the month.
* @param cal The UCalendar to set.
* @param attr The desired attribute; one of UCAL_LENIENT, UCAL_FIRST_DAY_OF_WEEK,
* or UCAL_MINIMAL_DAYS_IN_FIRST_WEEK
* @param newValue The new value of attr.
* @see ucal_getAttribute
* @stable ICU 2.0
*/
U_CAPI void U_EXPORT2
ucal_setAttribute( UCalendar* cal,
ucal_setAttribute(UCalendar* cal,
UCalendarAttribute attr,
int32_t newValue);
/**
* Get a locale for which calendars are available.
* A UCalendar in a locale returned by this function will contain the correct
* day and month names for the locale.
* @param index The index of the desired locale.
* @return A locale for which calendars are available, or 0 if none.
* @see ucal_countAvailable
* @stable ICU 2.0
*/
* Get a locale for which calendars are available.
* A UCalendar in a locale returned by this function will contain the correct
* day and month names for the locale.
* @param index The index of the desired locale.
* @return A locale for which calendars are available, or 0 if none.
* @see ucal_countAvailable
* @stable ICU 2.0
*/
U_CAPI const char* U_EXPORT2
ucal_getAvailable(int32_t index);
/**
* Determine how many locales have calendars available.
* This function is most useful as determining the loop ending condition for
* calls to \Ref{ucal_getAvailable}.
* @return The number of locales for which calendars are available.
* @see ucal_getAvailable
* @stable ICU 2.0
*/
* Determine how many locales have calendars available.
* This function is most useful as determining the loop ending condition for
* calls to \Ref{ucal_getAvailable}.
* @return The number of locales for which calendars are available.
* @see ucal_getAvailable
* @stable ICU 2.0
*/
U_CAPI int32_t U_EXPORT2
ucal_countAvailable(void);
/**
* Get a UCalendar's current time in millis.
* The time is represented as milliseconds from the epoch.
* @param cal The UCalendar to query.
* @param status A pointer to an UErrorCode to receive any errors
* @return The calendar's current time in millis.
* @see ucal_setMillis
* @see ucal_setDate
* @see ucal_setDateTime
* @stable ICU 2.0
*/
* Get a UCalendar's current time in millis.
* The time is represented as milliseconds from the epoch.
* @param cal The UCalendar to query.
* @param status A pointer to an UErrorCode to receive any errors
* @return The calendar's current time in millis.
* @see ucal_setMillis
* @see ucal_setDate
* @see ucal_setDateTime
* @stable ICU 2.0
*/
U_CAPI UDate U_EXPORT2
ucal_getMillis( const UCalendar* cal,
ucal_getMillis(const UCalendar* cal,
UErrorCode* status);
/**
* Set a UCalendar's current time in millis.
* The time is represented as milliseconds from the epoch.
* @param cal The UCalendar to set.
* @param dateTime The desired date and time.
* @param status A pointer to an UErrorCode to receive any errors
* @see ucal_getMillis
* @see ucal_setDate
* @see ucal_setDateTime
* @stable ICU 2.0
*/
* Set a UCalendar's current time in millis.
* The time is represented as milliseconds from the epoch.
* @param cal The UCalendar to set.
* @param dateTime The desired date and time.
* @param status A pointer to an UErrorCode to receive any errors
* @see ucal_getMillis
* @see ucal_setDate
* @see ucal_setDateTime
* @stable ICU 2.0
*/
U_CAPI void U_EXPORT2
ucal_setMillis( UCalendar* cal,
ucal_setMillis(UCalendar* cal,
UDate dateTime,
UErrorCode* status );
/**
* Set a UCalendar's current date.
* The date is represented as a series of 32-bit integers.
* @param cal The UCalendar to set.
* @param year The desired year.
* @param month The desired month; one of UCAL_JANUARY, UCAL_FEBRUARY, UCAL_MARCH, UCAL_APRIL, UCAL_MAY,
* UCAL_JUNE, UCAL_JULY, UCAL_AUGUST, UCAL_SEPTEMBER, UCAL_OCTOBER, UCAL_NOVEMBER, UCAL_DECEMBER, UCAL_UNDECIMBER
* @param date The desired day of the month.
* @param status A pointer to an UErrorCode to receive any errors
* @see ucal_getMillis
* @see ucal_setMillis
* @see ucal_setDateTime
* @stable ICU 2.0
*/
* Set a UCalendar's current date.
* The date is represented as a series of 32-bit integers.
* @param cal The UCalendar to set.
* @param year The desired year.
* @param month The desired month; one of UCAL_JANUARY, UCAL_FEBRUARY, UCAL_MARCH, UCAL_APRIL, UCAL_MAY,
* UCAL_JUNE, UCAL_JULY, UCAL_AUGUST, UCAL_SEPTEMBER, UCAL_OCTOBER, UCAL_NOVEMBER, UCAL_DECEMBER, UCAL_UNDECIMBER
* @param date The desired day of the month.
* @param status A pointer to an UErrorCode to receive any errors
* @see ucal_getMillis
* @see ucal_setMillis
* @see ucal_setDateTime
* @stable ICU 2.0
*/
U_CAPI void U_EXPORT2
ucal_setDate( UCalendar* cal,
ucal_setDate(UCalendar* cal,
int32_t year,
int32_t month,
int32_t date,
UErrorCode *status);
UErrorCode* status);
/**
* Set a UCalendar's current date.
* The date is represented as a series of 32-bit integers.
* @param cal The UCalendar to set.
* @param year The desired year.
* @param month The desired month; one of UCAL_JANUARY, UCAL_FEBRUARY, UCAL_MARCH, UCAL_APRIL, UCAL_MAY,
* UCAL_JUNE, UCAL_JULY, UCAL_AUGUST, UCAL_SEPTEMBER, UCAL_OCTOBER, UCAL_NOVEMBER, UCAL_DECEMBER, UCAL_UNDECIMBER
* @param date The desired day of the month.
* @param hour The desired hour of day.
* @param minute The desired minute.
* @param second The desirec second.
* @param status A pointer to an UErrorCode to receive any errors
* @see ucal_getMillis
* @see ucal_setMillis
* @see ucal_setDate
* @stable ICU 2.0
*/
* Set a UCalendar's current date.
* The date is represented as a series of 32-bit integers.
* @param cal The UCalendar to set.
* @param year The desired year.
* @param month The desired month; one of UCAL_JANUARY, UCAL_FEBRUARY, UCAL_MARCH, UCAL_APRIL, UCAL_MAY,
* UCAL_JUNE, UCAL_JULY, UCAL_AUGUST, UCAL_SEPTEMBER, UCAL_OCTOBER, UCAL_NOVEMBER, UCAL_DECEMBER, UCAL_UNDECIMBER
* @param date The desired day of the month.
* @param hour The desired hour of day.
* @param minute The desired minute.
* @param second The desirec second.
* @param status A pointer to an UErrorCode to receive any errors
* @see ucal_getMillis
* @see ucal_setMillis
* @see ucal_setDate
* @stable ICU 2.0
*/
U_CAPI void U_EXPORT2
ucal_setDateTime( UCalendar* cal,
ucal_setDateTime(UCalendar* cal,
int32_t year,
int32_t month,
int32_t date,
int32_t hour,
int32_t minute,
int32_t second,
UErrorCode *status);
UErrorCode* status);
/**
* Returns TRUE if two UCalendars are equivalent. Equivalent
@ -583,139 +628,140 @@ ucal_equivalentTo(const UCalendar* cal1,
const UCalendar* cal2);
/**
* Add a specified signed amount to a particular field in a UCalendar.
* This can modify more significant fields in the calendar.
* @param cal The UCalendar to which to add.
* @param field The field to which to add the signed value; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
* @param amount The signed amount to add to field. If the amount causes the value
* to exceed to maximum or minimum values for that field, other fields are modified
* to preserve the magnitude of the change.
* @param status A pointer to an UErrorCode to receive any errors
* @see ucal_roll
* @stable ICU 2.0
*/
* Add a specified signed amount to a particular field in a UCalendar.
* This can modify more significant fields in the calendar.
* @param cal The UCalendar to which to add.
* @param field The field to which to add the signed value; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
* @param amount The signed amount to add to field. If the amount causes the value
* to exceed to maximum or minimum values for that field, other fields are modified
* to preserve the magnitude of the change.
* @param status A pointer to an UErrorCode to receive any errors
* @see ucal_roll
* @stable ICU 2.0
*/
U_CAPI void U_EXPORT2
ucal_add( UCalendar* cal,
ucal_add(UCalendar* cal,
UCalendarDateFields field,
int32_t amount,
UErrorCode* status);
/**
* Add a specified signed amount to a particular field in a UCalendar.
* This will not modify more significant fields in the calendar.
* @param cal The UCalendar to which to add.
* @param field The field to which to add the signed value; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
* @param amount The signed amount to add to field. If the amount causes the value
* to exceed to maximum or minimum values for that field, the field is pinned to a permissible
* value.
* @param status A pointer to an UErrorCode to receive any errors
* @see ucal_add
* @stable ICU 2.0
*/
* Add a specified signed amount to a particular field in a UCalendar.
* This will not modify more significant fields in the calendar.
* @param cal The UCalendar to which to add.
* @param field The field to which to add the signed value; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
* @param amount The signed amount to add to field. If the amount causes the value
* to exceed to maximum or minimum values for that field, the field is pinned to a permissible
* value.
* @param status A pointer to an UErrorCode to receive any errors
* @see ucal_add
* @stable ICU 2.0
*/
U_CAPI void U_EXPORT2
ucal_roll( UCalendar* cal,
ucal_roll(UCalendar* cal,
UCalendarDateFields field,
int32_t amount,
UErrorCode* status);
/**
* Get the current value of a field from a UCalendar.
* All fields are represented as 32-bit integers.
* @param cal The UCalendar to query.
* @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
* @param status A pointer to an UErrorCode to receive any errors
* @return The value of the desired field.
* @see ucal_set
* @see ucal_isSet
* @see ucal_clearField
* @see ucal_clear
* @stable ICU 2.0
*/
* Get the current value of a field from a UCalendar.
* All fields are represented as 32-bit integers.
* @param cal The UCalendar to query.
* @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
* @param status A pointer to an UErrorCode to receive any errors
* @return The value of the desired field.
* @see ucal_set
* @see ucal_isSet
* @see ucal_clearField
* @see ucal_clear
* @stable ICU 2.0
*/
U_CAPI int32_t U_EXPORT2
ucal_get( const UCalendar* cal,
ucal_get(const UCalendar* cal,
UCalendarDateFields field,
UErrorCode* status );
/**
* Set the value of a field in a UCalendar.
* All fields are represented as 32-bit integers.
* @param cal The UCalendar to set.
* @param field The field to set; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
* @param value The desired value of field.
* @see ucal_get
* @see ucal_isSet
* @see ucal_clearField
* @see ucal_clear
* @stable ICU 2.0
*/
* Set the value of a field in a UCalendar.
* All fields are represented as 32-bit integers.
* @param cal The UCalendar to set.
* @param field The field to set; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
* @param value The desired value of field.
* @see ucal_get
* @see ucal_isSet
* @see ucal_clearField
* @see ucal_clear
* @stable ICU 2.0
*/
U_CAPI void U_EXPORT2
ucal_set( UCalendar* cal,
ucal_set(UCalendar* cal,
UCalendarDateFields field,
int32_t value);
/**
* Determine if a field in a UCalendar is set.
* All fields are represented as 32-bit integers.
* @param cal The UCalendar to query.
* @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
* @return TRUE if field is set, FALSE otherwise.
* @see ucal_get
* @see ucal_set
* @see ucal_clearField
* @see ucal_clear
* @stable ICU 2.0
*/
* Determine if a field in a UCalendar is set.
* All fields are represented as 32-bit integers.
* @param cal The UCalendar to query.
* @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
* @return TRUE if field is set, FALSE otherwise.
* @see ucal_get
* @see ucal_set
* @see ucal_clearField
* @see ucal_clear
* @stable ICU 2.0
*/
U_CAPI UBool U_EXPORT2
ucal_isSet( const UCalendar* cal,
ucal_isSet(const UCalendar* cal,
UCalendarDateFields field);
/**
* Clear a field in a UCalendar.
* All fields are represented as 32-bit integers.
* @param cal The UCalendar containing the field to clear.
* @param field The field to clear; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
* @see ucal_get
* @see ucal_set
* @see ucal_isSet
* @see ucal_clear
* @stable ICU 2.0
*/
* Clear a field in a UCalendar.
* All fields are represented as 32-bit integers.
* @param cal The UCalendar containing the field to clear.
* @param field The field to clear; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
* @see ucal_get
* @see ucal_set
* @see ucal_isSet
* @see ucal_clear
* @stable ICU 2.0
*/
U_CAPI void U_EXPORT2
ucal_clearField( UCalendar* cal,
ucal_clearField(UCalendar* cal,
UCalendarDateFields field);
/**
* Clear all fields in a UCalendar.
* All fields are represented as 32-bit integers.
* @param cal The UCalendar to clear.
* @see ucal_get
* @see ucal_set
* @see ucal_isSet
* @see ucal_clearField
* @stable ICU 2.0
*/
* Clear all fields in a UCalendar.
* All fields are represented as 32-bit integers.
* @param cal The UCalendar to clear.
* @see ucal_get
* @see ucal_set
* @see ucal_isSet
* @see ucal_clearField
* @stable ICU 2.0
*/
U_CAPI void U_EXPORT2
ucal_clear(UCalendar* calendar);
/** Possible limit values for a UCalendar
/**
* Possible limit values for a UCalendar
* @stable ICU 2.0
*/
enum UCalendarLimitType {
@ -737,24 +783,51 @@ enum UCalendarLimitType {
typedef enum UCalendarLimitType UCalendarLimitType;
/**
* Determine a limit for a field in a UCalendar.
* A limit is a maximum or minimum value for a field.
* @param cal The UCalendar to query.
* @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
* @param type The desired critical point; one of UCAL_MINIMUM, UCAL_MAXIMUM, UCAL_GREATEST_MINIMUM,
* UCAL_LEAST_MAXIMUM, UCAL_ACTUAL_MINIMUM, UCAL_ACTUAL_MAXIMUM
* @param status A pointer to an UErrorCode to receive any errors.
* @return The requested value.
* @stable ICU 2.0
*/
* Determine a limit for a field in a UCalendar.
* A limit is a maximum or minimum value for a field.
* @param cal The UCalendar to query.
* @param field The desired field; one of UCAL_ERA, UCAL_YEAR, UCAL_MONTH,
* UCAL_WEEK_OF_YEAR, UCAL_WEEK_OF_MONTH, UCAL_DATE, UCAL_DAY_OF_YEAR, UCAL_DAY_OF_WEEK,
* UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_AM_PM, UCAL_HOUR, UCAL_HOUR_OF_DAY, UCAL_MINUTE, UCAL_SECOND,
* UCAL_MILLISECOND, UCAL_ZONE_OFFSET, UCAL_DST_OFFSET.
* @param type The desired critical point; one of UCAL_MINIMUM, UCAL_MAXIMUM, UCAL_GREATEST_MINIMUM,
* UCAL_LEAST_MAXIMUM, UCAL_ACTUAL_MINIMUM, UCAL_ACTUAL_MAXIMUM
* @param status A pointer to an UErrorCode to receive any errors.
* @return The requested value.
* @stable ICU 2.0
*/
U_CAPI int32_t U_EXPORT2
ucal_getLimit( const UCalendar* cal,
ucal_getLimit(const UCalendar* cal,
UCalendarDateFields field,
UCalendarLimitType type,
UErrorCode *status);
UErrorCode* status);
/**
* Get an available TimeZone ID.
* A Timezone ID is a string of the form "America/Los Angeles".
* @param rawOffset The desired GMT offset
* @param index The index of the desired TimeZone.
* @param status A pointer to an UErrorCode to receive any errors
* @return The requested TimeZone ID, or 0 if not found
* @see ucal_countAvailableTZIDs
* @obsolete ICU 2.8. Use ucal_openTimeZoneEnumeration instead since this API will be removed in that release.
*/
U_CAPI const UChar* U_EXPORT2
ucal_getAvailableTZIDs(int32_t rawOffset,
int32_t index,
UErrorCode* status);
/**
* Determine how many TimeZones exist with a certain offset.
* This function is most useful as determining the loop ending condition for
* calls to \Ref{ucal_getAvailableTZIDs}.
* @param rawOffset The desired GMT offset.
* @return The number of TimeZones with rawOffset.
* @see ucal_getAvailableTZIDs
* @obsolete ICU 2.8. Use ucal_openTimeZoneEnumeration instead since this API will be removed in that release.
*/
U_CAPI int32_t U_EXPORT2
ucal_countAvailableTZIDs(int32_t rawOffset);
#endif /* #if !UCONFIG_NO_FORMATTING */

View File

@ -45,11 +45,16 @@ void addCalTest(TestNode** root)
/* "GMT" */
static const UChar fgGMTID [] = { 0x0047, 0x004d, 0x0054, 0x0000 };
/* "PST" */
static const UChar PST[] = {0x50, 0x53, 0x54, 0x00}; /* "PST" */
static const UChar EUROPE_PARIS[] = {0x45, 0x75, 0x72, 0x6F, 0x70, 0x65, 0x2F, 0x50, 0x61, 0x72, 0x69, 0x73, 0x00}; /* "Europe/Paris" */
static void TestCalendar()
{
UCalendar *caldef = 0, *caldef2 = 0, *calfr = 0, *calit = 0;
UEnumeration* uenum = NULL;
int32_t count, count2, offset,i;
int32_t count, count2, offset,i,j;
UChar *tzID = 0;
UChar *tzdname = 0;
UErrorCode status = U_ZERO_ERROR;
@ -58,6 +63,7 @@ static void TestCalendar()
UChar *result = 0;
int32_t resultlength, resultlengthneeded;
char tempMsgBuf[256];
UChar zone1[32], zone2[32];
/*Testing countAvailableTimeZones*/
offset=0;
@ -72,41 +78,44 @@ static void TestCalendar()
for(i=0;i<count;i++){
ucal_getAvailableTZIDs(offset, i, &status);
if(U_FAILURE(status)){
log_err("FAIL: ucal_getAvailableTZIDs returned %s\n", myErrorName(status));
log_err("FAIL: ucal_getAvailableTZIDs returned %s\n", u_errorName(status));
}
log_verbose("%s\n", u_austrcpy(tempMsgBuf, ucal_getAvailableTZIDs(offset, i, &status)));
}
/*get Illegal TZID where index >= count*/
ucal_getAvailableTZIDs(offset, i, &status);
if(status != U_INDEX_OUTOFBOUNDS_ERROR){
log_err("FAIL:for TZID index >= count Expected INDEX_OUTOFBOUNDS_ERROR Got %s\n", myErrorName(status));
log_err("FAIL:for TZID index >= count Expected INDEX_OUTOFBOUNDS_ERROR Got %s\n", u_errorName(status));
}
status=U_ZERO_ERROR;
/*Test ucal_openTimeZoneEnumeration*/
offset=0;
uenum = ucal_openTimeZoneEnumeration(offset, &status);
/*Test ucal_openTimeZones & ucal_openCountryTimeZones*/
for (j=0; j<2; ++j) {
const char* api = (j==0) ? "ucal_openTimeZones()" :
"ucal_openCountryTimeZones(US)";
uenum = (j==0) ? ucal_openTimeZones(&status) :
ucal_openCountryTimeZones("US", &status);
if (U_FAILURE(status)) {
log_err("FAIL: ucal_openTimeZoneEnumeration failed with %s",
myErrorName(status));
log_err("FAIL: %s failed with %s", api,
u_errorName(status));
} else {
const char* id;
int32_t len;
count = uenum_count(uenum, &status);
log_verbose("The number of timezone id's present with offset 0 is %d\n", count);
log_verbose("%s returned %d timezone id's:\n", api, count);
if (count < 5) { /* Don't hard code an exact == test here! */
log_err("FAIL: in ucal_openTimeZoneEnumeration, got %d, expected at least 5 for rawOffset 0\n", count);
log_err("FAIL: in %s, got %d, expected at least 5\n", api, count);
}
uenum_reset(uenum, &status);
if (U_FAILURE(status)){
log_err("FAIL: uenum_reset for ucal_openTimeZoneEnumeration returned %s\n",
myErrorName(status));
log_err("FAIL: uenum_reset for %s returned %s\n",
api, u_errorName(status));
}
for (i=0; i<count; i++) {
id = uenum_next(uenum, &len, &status);
if (U_FAILURE(status)){
log_err("FAIL: uenum_next for ucal_openTimeZoneEnumeration returned %s\n",
myErrorName(status));
log_err("FAIL: uenum_next for %s returned %s\n",
api, u_errorName(status));
} else {
log_verbose("%s\n", id);
}
@ -114,11 +123,55 @@ static void TestCalendar()
/* Next one should be NULL */
id = uenum_next(uenum, &len, &status);
if (id != NULL) {
log_err("FAIL: uenum_next for ucal_openTimeZoneEnumeration returned %s, expected NULL\n",
id);
log_err("FAIL: uenum_next for %s returned %s, expected NULL\n",
api, id);
}
}
uenum_close(uenum);
}
/*Test ucal_getDSTSavings*/
status = U_ZERO_ERROR;
i = ucal_getDSTSavings(fgGMTID, &status);
if (U_FAILURE(status)) {
log_err("FAIL: ucal_getDSTSavings(GMT) => %s\n",
u_errorName(status));
} else if (i != 0) {
log_err("FAIL: ucal_getDSTSavings(GMT) => %d, expect 0\n", i);
}
i = ucal_getDSTSavings(PST, &status);
if (U_FAILURE(status)) {
log_err("FAIL: ucal_getDSTSavings(PST) => %s\n",
u_errorName(status));
} else if (i != 1*60*60*1000) {
log_err("FAIL: ucal_getDSTSavings(PST) => %d, expect %d\n", i, 1*60*60*1000);
}
/*Test ucal_set/getDefaultTimeZone*/
status = U_ZERO_ERROR;
i = ucal_getDefaultTimeZone(zone1, sizeof(zone1)/sizeof(zone1[0]), &status);
if (U_FAILURE(status)) {
log_err("FAIL: ucal_getDefaultTimeZone() => %s\n",
u_errorName(status));
} else {
ucal_setDefaultTimeZone(EUROPE_PARIS, &status);
if (U_FAILURE(status)) {
log_err("FAIL: ucal_setDefaultTimeZone(Europe/Paris) => %s\n",
u_errorName(status));
} else {
i = ucal_getDefaultTimeZone(zone2, sizeof(zone2)/sizeof(zone2[0]), &status);
if (U_FAILURE(status)) {
log_err("FAIL: ucal_getDefaultTimeZone() => %s\n",
u_errorName(status));
} else {
if (u_strcmp(zone2, EUROPE_PARIS) != 0) {
log_err("FAIL: ucal_getDefaultTimeZone() did not return Europe/Paris\n");
}
}
}
status = U_ZERO_ERROR;
ucal_setDefaultTimeZone(zone1, &status);
}
/*Testing the ucal_open() function*/
log_verbose("\nTesting the ucal_open()\n");
@ -126,21 +179,21 @@ static void TestCalendar()
u_uastrcpy(tzID, "PST");
caldef=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status);
if(U_FAILURE(status)){
log_err("FAIL: error in ucal_open caldef : %s\n", myErrorName(status));
log_err("FAIL: error in ucal_open caldef : %s\n", u_errorName(status));
}
caldef2=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status);
if(U_FAILURE(status)){
log_err("FAIL: error in ucal_open caldef : %s\n", myErrorName(status));
log_err("FAIL: error in ucal_open caldef : %s\n", u_errorName(status));
}
u_strcpy(tzID, fgGMTID);
calfr=ucal_open(tzID, u_strlen(tzID), "fr_FR", UCAL_TRADITIONAL, &status);
if(U_FAILURE(status)){
log_err("FAIL: error in ucal_open calfr : %s\n", myErrorName(status));
log_err("FAIL: error in ucal_open calfr : %s\n", u_errorName(status));
}
calit=ucal_open(tzID, u_strlen(tzID), "it_IT", UCAL_TRADITIONAL, &status);
if(U_FAILURE(status)) {
log_err("FAIL: error in ucal_open calit : %s\n", myErrorName(status));
log_err("FAIL: error in ucal_open calit : %s\n", u_errorName(status));
}
@ -174,7 +227,7 @@ static void TestCalendar()
/* open the date format and format the date to check the output */
datdef=udat_open(UDAT_FULL,UDAT_FULL ,NULL, NULL, 0,NULL,0,&status);
if(U_FAILURE(status)){
log_err("FAIL: error in creating the dateformat : %s\n", myErrorName(status));
log_err("FAIL: error in creating the dateformat : %s\n", u_errorName(status));
return;
}
log_verbose("PASS: The current date and time fetched is %s\n", u_austrcpy(tempMsgBuf, myDateFormat(datdef, now)) );
@ -194,7 +247,7 @@ static void TestCalendar()
ucal_getTimeZoneDisplayName(caldef, UCAL_DST, "en_US", result, resultlength, &status);
}
if(U_FAILURE(status)) {
log_err("FAIL: Error in getting the timezone display name : %s\n", myErrorName(status));
log_err("FAIL: Error in getting the timezone display name : %s\n", u_errorName(status));
}
else{
log_verbose("PASS: getting the time zone display name successful : %s, %d needed \n",
@ -280,7 +333,7 @@ static void TestCalendar()
ucal_setDateTime(caldef, 1999, UCAL_MARCH, 3, 10, 45, 20, &status);
ucal_inDaylightTime(caldef, &status );
if(U_FAILURE(status)) {
log_err("Error in ucal_inDaylightTime: %s\n", myErrorName(status));
log_err("Error in ucal_inDaylightTime: %s\n", u_errorName(status));
}
if(!ucal_inDaylightTime(caldef, &status))
log_verbose("PASS: It is not in daylight saving's time\n");
@ -330,7 +383,7 @@ static void TestGetSetDateAPI()
datdef=udat_open(UDAT_DEFAULT,UDAT_DEFAULT ,"en_US",fgGMTID,-1,NULL,0, &status);
if(U_FAILURE(status))
{
log_err("error in creating the dateformat : %s\n", myErrorName(status));
log_err("error in creating the dateformat : %s\n", u_errorName(status));
return;
}
@ -339,14 +392,14 @@ static void TestGetSetDateAPI()
log_verbose("\nTesting the date and time fetched in millis for a calendar using getMillis\n");
d1=ucal_getMillis(caldef, &status);
if(U_FAILURE(status)){
log_err("Error in getMillis : %s\n", myErrorName(status));
log_err("Error in getMillis : %s\n", u_errorName(status));
}
/*testing setMillis */
log_verbose("\nTesting the set date and time function using setMillis\n");
ucal_setMillis(caldef, d2, &status);
if(U_FAILURE(status)){
log_err("Error in setMillis : %s\n", myErrorName(status));
log_err("Error in setMillis : %s\n", u_errorName(status));
}
/*testing if the calendar date is set properly or not */
@ -362,14 +415,14 @@ static void TestGetSetDateAPI()
log_verbose("\nTesting if the function ucal_setTimeZone() works fine\n");
ucal_setMillis(caldef2, d2, &status);
if(U_FAILURE(status)){
log_err("Error in getMillis : %s\n", myErrorName(status));;
log_err("Error in getMillis : %s\n", u_errorName(status));;
}
hour=ucal_get(caldef2, UCAL_HOUR_OF_DAY, &status);
u_uastrcpy(tzID, "PST");
ucal_setTimeZone(caldef2,tzID, 3, &status);
if(U_FAILURE(status)){
log_err("Error in setting the time zone using ucal_setTimeZone(): %s\n", myErrorName(status));
log_err("Error in setting the time zone using ucal_setTimeZone(): %s\n", u_errorName(status));
}
else
log_verbose("ucal_setTimeZone worked fine\n");
@ -385,7 +438,7 @@ static void TestGetSetDateAPI()
u_strcpy(tzID, fgGMTID);
ucal_setTimeZone(caldef2, tzID, 3, &status);
if(U_FAILURE(status)){
log_err("Error in setting the time zone using ucal_setTimeZone(): %s\n", myErrorName(status));
log_err("Error in setting the time zone using ucal_setTimeZone(): %s\n", u_errorName(status));
}
if(d2==ucal_getMillis(caldef2, &status))
log_verbose("PASS: setTimeZone roundtrip test passed\n");
@ -394,7 +447,7 @@ static void TestGetSetDateAPI()
zoneOffset = ucal_get(caldef2, UCAL_ZONE_OFFSET, &status);
if(U_FAILURE(status)){
log_err("Error in getting the time zone using ucal_get() after using ucal_setTimeZone(): %s\n", myErrorName(status));
log_err("Error in getting the time zone using ucal_get() after using ucal_setTimeZone(): %s\n", u_errorName(status));
}
else if (zoneOffset != 0) {
log_err("Error in getting the time zone using ucal_get() after using ucal_setTimeZone() offset=%d\n", zoneOffset);
@ -402,7 +455,7 @@ static void TestGetSetDateAPI()
ucal_setTimeZone(caldef2, NULL, -1, &status);
if(U_FAILURE(status)){
log_err("Error in setting the time zone using ucal_setTimeZone(): %s\n", myErrorName(status));
log_err("Error in setting the time zone using ucal_setTimeZone(): %s\n", u_errorName(status));
}
if(ucal_getMillis(caldef2, &status))
log_verbose("PASS: setTimeZone roundtrip test passed\n");
@ -411,7 +464,7 @@ static void TestGetSetDateAPI()
zoneOffset = ucal_get(caldef2, UCAL_ZONE_OFFSET, &status);
if(U_FAILURE(status)){
log_err("Error in getting the time zone using ucal_get() after using ucal_setTimeZone(): %s\n", myErrorName(status));
log_err("Error in getting the time zone using ucal_get() after using ucal_setTimeZone(): %s\n", u_errorName(status));
}
else if (zoneOffset != -28800000) {
log_err("Error in getting the time zone using ucal_get() after using ucal_setTimeZone() offset=%d\n", zoneOffset);
@ -425,7 +478,7 @@ static void TestGetSetDateAPI()
u_uastrcpy(temp, "Dec 17, 1971 11:05:28 PM");
ucal_setDate(caldef,1971, UCAL_DECEMBER, 17, &status);
if(U_FAILURE(status)){
log_err("error in setting the calendar date : %s\n", myErrorName(status));
log_err("error in setting the calendar date : %s\n", u_errorName(status));
}
/*checking if the calendar date is set properly or not */
d1=ucal_getMillis(caldef, &status);
@ -456,7 +509,7 @@ static void TestGetSetDateAPI()
u_uastrcpy(temp, "May 3, 1972 4:30:42 PM");
ucal_setDateTime(caldef,1972, UCAL_MAY, 3, 16, 30, 42, &status);
if(U_FAILURE(status)){
log_err("error in setting the calendar date : %s\n", myErrorName(status));
log_err("error in setting the calendar date : %s\n", u_errorName(status));
}
/*checking if the calendar date is set properly or not */
d1=ucal_getMillis(caldef, &status);
@ -509,20 +562,20 @@ static void TestFieldGetSet()
/*open the calendar used */
cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status);
if (U_FAILURE(status)) {
log_err("ucal_open failed: %s\n", myErrorName(status));
log_err("ucal_open failed: %s\n", u_errorName(status));
return;
}
datdef=udat_open(UDAT_SHORT,UDAT_SHORT ,NULL,fgGMTID,-1,NULL, 0, &status);
if(U_FAILURE(status))
{
log_err("error in creating the dateformat : %s\n", myErrorName(status));
log_err("error in creating the dateformat : %s\n", u_errorName(status));
}
/*Testing ucal_get()*/
log_verbose("\nTesting the ucal_get() function of Calendar\n");
ucal_setDateTime(cal, 1999, UCAL_MARCH, 12, 5, 25, 30, &status);
if(U_FAILURE(status)){
log_err("error in the setDateTime() : %s\n", myErrorName(status));
log_err("error in the setDateTime() : %s\n", u_errorName(status));
}
if(ucal_get(cal, UCAL_YEAR, &status)!=1999 || ucal_get(cal, UCAL_MONTH, &status)!=2 ||
ucal_get(cal, UCAL_DATE, &status)!=12 || ucal_get(cal, UCAL_HOUR, &status)!=5)
@ -658,7 +711,7 @@ static void TestAddRollExtensive()
/*open the calendar used */
cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_GREGORIAN, &status);;
if (U_FAILURE(status)) {
log_err("ucal_open() failed : %s\n", myErrorName(status));
log_err("ucal_open() failed : %s\n", u_errorName(status));
return;
}
@ -670,30 +723,30 @@ static void TestAddRollExtensive()
log_verbose("\nTesting to confirm that adding to various fields works with ucal_add()\n");
checkDate(cal, y, m, d);
ucal_add(cal,UCAL_YEAR, 1, &status);
if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", myErrorName(status)); return; }
if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", u_errorName(status)); return; }
y++;
checkDate(cal, y, m, d);
ucal_add(cal,UCAL_MONTH, 12, &status);
if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", myErrorName(status) ); return; }
if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", u_errorName(status) ); return; }
y+=1;
checkDate(cal, y, m, d);
ucal_add(cal,UCAL_DATE, 1, &status);
if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", myErrorName(status) ); return; }
if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", u_errorName(status) ); return; }
d++;
checkDate(cal, y, m, d);
ucal_add(cal,UCAL_DATE, 2, &status);
if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", myErrorName(status) ); return; }
if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", u_errorName(status) ); return; }
d += 2;
checkDate(cal, y, m, d);
ucal_add(cal,UCAL_DATE, 28, &status);
if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", myErrorName(status) ); return; }
if (U_FAILURE(status)) { log_err("ucal_add failed: %s\n", u_errorName(status) ); return; }
++m;
checkDate(cal, y, m, d);
ucal_add(cal, (UCalendarDateFields)-1, 10, &status);
if(status==U_ILLEGAL_ARGUMENT_ERROR)
log_verbose("Pass: Illegal argument error as expected\n");
else{
log_err("Fail: No, illegal argument error as expected. Got....: %s\n", myErrorName(status));
log_err("Fail: No, illegal argument error as expected. Got....: %s\n", u_errorName(status));
}
status=U_ZERO_ERROR;
@ -701,39 +754,39 @@ static void TestAddRollExtensive()
/*confirm that applying roll to various fields works fine*/
log_verbose("\nTesting to confirm that ucal_roll() works\n");
ucal_roll(cal, UCAL_DATE, -1, &status);
if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", myErrorName(status) ); return; }
if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", u_errorName(status) ); return; }
d -=1;
checkDate(cal, y, m, d);
ucal_roll(cal, UCAL_MONTH, -2, &status);
if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", myErrorName(status) ); return; }
if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", u_errorName(status) ); return; }
m -=2;
checkDate(cal, y, m, d);
ucal_roll(cal, UCAL_DATE, 1, &status);
if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", myErrorName(status) ); return; }
if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", u_errorName(status) ); return; }
d +=1;
checkDate(cal, y, m, d);
ucal_roll(cal, UCAL_MONTH, -12, &status);
if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", myErrorName(status) ); return; }
if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", u_errorName(status) ); return; }
checkDate(cal, y, m, d);
ucal_roll(cal, UCAL_YEAR, -1, &status);
if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", myErrorName(status) ); return; }
if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", u_errorName(status) ); return; }
y -=1;
checkDate(cal, y, m, d);
ucal_roll(cal, UCAL_DATE, 29, &status);
if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", myErrorName(status) ); return; }
if (U_FAILURE(status)) { log_err("ucal_roll failed: %s\n", u_errorName(status) ); return; }
d = 2;
checkDate(cal, y, m, d);
ucal_roll(cal, (UCalendarDateFields)-1, 10, &status);
if(status==U_ILLEGAL_ARGUMENT_ERROR)
log_verbose("Pass: illegal arguement error as expected\n");
else{
log_err("Fail: no illegal argument error got..: %s\n", myErrorName(status));
log_err("Fail: no illegal argument error got..: %s\n", u_errorName(status));
return;
}
status=U_ZERO_ERROR;
ucal_setDateTime(cal, 1999, UCAL_FEBRUARY, 28, 10, 30, 45, &status);
if(U_FAILURE(status)){
log_err("error is setting the datetime: %s\n", myErrorName(status));
log_err("error is setting the datetime: %s\n", u_errorName(status));
}
ucal_add(cal, UCAL_MONTH, 1, &status);
checkDate(cal, 1999, UCAL_MARCH, 28);
@ -748,7 +801,7 @@ static void TestAddRollExtensive()
y = 1997; m = UCAL_FEBRUARY; d = 1; hr = 1; min = 1; sec = 0; ms = 0;
cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status);
if (U_FAILURE(status)) {
log_err("ucal_open failed: %s\n", myErrorName(status));
log_err("ucal_open failed: %s\n", u_errorName(status));
return;
}
ucal_set(cal, UCAL_YEAR, y);
@ -771,7 +824,7 @@ static void TestAddRollExtensive()
for (i = 0; i < limit; i++) {
ucal_add(cal, e, -1, &status);
if (U_FAILURE(status)) {
log_err("ucal_add -1 failed: %s\n", myErrorName(status));
log_err("ucal_add -1 failed: %s\n", u_errorName(status));
return;
}
}
@ -791,7 +844,7 @@ static void TestAddRollExtensive()
for (i = 0; i < limit; i++) {
ucal_roll(cal, e, -1, &status);
if (U_FAILURE(status)) {
log_err("ucal_roll -1 failed: %s\n", myErrorName(status));
log_err("ucal_roll -1 failed: %s\n", u_errorName(status));
return;
}
}
@ -817,7 +870,7 @@ static void TestGetLimits()
/*open the calendar used */
cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_GREGORIAN, &status);;
if (U_FAILURE(status)) {
log_err("ucal_open() for gregorian calendar failed in TestGetLimits: %s\n", myErrorName(status));
log_err("ucal_open() for gregorian calendar failed in TestGetLimits: %s\n", u_errorName(status));
return;
}
@ -856,7 +909,7 @@ static void TestGetLimits()
ac_min=ucal_getLimit(cal, UCAL_MONTH, UCAL_ACTUAL_MINIMUM, &status);
ac_max=ucal_getLimit(cal, UCAL_MONTH, UCAL_ACTUAL_MAXIMUM, &status);
if(U_FAILURE(status)){
log_err("Error in getLimits: %s\n", myErrorName(status));
log_err("Error in getLimits: %s\n", u_errorName(status));
}
if(min!=0 || max!=11 || gr_min!=0 || le_max!=11 || ac_min!=0 || ac_max!=11)
log_err("There is and error in getLimits in fetching the values\n");
@ -917,13 +970,13 @@ static void TestDOWProgression()
/*open the calendar used */
cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status);;
if (U_FAILURE(status)) {
log_err("ucal_open failed: %s\n", myErrorName(status));
log_err("ucal_open failed: %s\n", u_errorName(status));
return;
}
datfor=udat_open(UDAT_MEDIUM,UDAT_MEDIUM ,NULL, fgGMTID,-1,NULL, 0, &status);
if(U_FAILURE(status)){
log_err("error in creating the dateformat : %s\n", myErrorName(status));
log_err("error in creating the dateformat : %s\n", u_errorName(status));
}
@ -932,23 +985,23 @@ static void TestDOWProgression()
log_verbose("\nTesting the DOW progression\n");
initialDOW = ucal_get(cal, UCAL_DAY_OF_WEEK, &status);
if (U_FAILURE(status)) { log_err("ucal_get() failed: %s\n", myErrorName(status) ); return; }
if (U_FAILURE(status)) { log_err("ucal_get() failed: %s\n", u_errorName(status) ); return; }
newDOW = initialDOW;
do {
DOW = newDOW;
log_verbose("DOW = %d...\n", DOW);
date1=ucal_getMillis(cal, &status);
if(U_FAILURE(status)){ log_err("ucal_getMiilis() failed: %s\n", myErrorName(status)); return;}
if(U_FAILURE(status)){ log_err("ucal_getMiilis() failed: %s\n", u_errorName(status)); return;}
log_verbose("%s\n", u_austrcpy(tempMsgBuf, myDateFormat(datfor, date1)));
ucal_add(cal,UCAL_DAY_OF_WEEK, delta, &status);
if (U_FAILURE(status)) { log_err("ucal_add() failed: %s\n", myErrorName(status)); return; }
if (U_FAILURE(status)) { log_err("ucal_add() failed: %s\n", u_errorName(status)); return; }
newDOW = ucal_get(cal, UCAL_DAY_OF_WEEK, &status);
if (U_FAILURE(status)) { log_err("ucal_get() failed: %s\n", myErrorName(status)); return; }
if (U_FAILURE(status)) { log_err("ucal_get() failed: %s\n", u_errorName(status)); return; }
expectedDOW = 1 + (DOW + delta - 1) % 7;
date1=ucal_getMillis(cal, &status);
if(U_FAILURE(status)){ log_err("ucal_getMiilis() failed: %s\n", myErrorName(status)); return;}
if(U_FAILURE(status)){ log_err("ucal_getMiilis() failed: %s\n", u_errorName(status)); return;}
if (newDOW != expectedDOW) {
log_err("Day of week should be %d instead of %d on %s", expectedDOW, newDOW,
u_austrcpy(tempMsgBuf, myDateFormat(datfor, date1)) );
@ -993,30 +1046,30 @@ static void testZones(int32_t yr, int32_t mo, int32_t dt, int32_t hr, int32_t mn
u_strcpy(tzID, fgGMTID);
gmtcal=ucal_open(tzID, 3, "en_US", UCAL_TRADITIONAL, &status);;
if (U_FAILURE(status)) {
log_err("ucal_open failed: %s\n", myErrorName(status));
log_err("ucal_open failed: %s\n", u_errorName(status));
return;
}
u_uastrcpy(tzID, "PST");
cal = ucal_open(tzID, 3, "en_US", UCAL_TRADITIONAL, &status);
if (U_FAILURE(status)) {
log_err("ucal_open failed: %s\n", myErrorName(status));
log_err("ucal_open failed: %s\n", u_errorName(status));
return;
}
datfor=udat_open(UDAT_MEDIUM,UDAT_MEDIUM ,NULL, fgGMTID,-1,NULL, 0, &status);
if(U_FAILURE(status)){
log_err("error in creating the dateformat : %s\n", myErrorName(status));
log_err("error in creating the dateformat : %s\n", u_errorName(status));
}
ucal_setDateTime(gmtcal, yr, mo - 1, dt, hr, mn, sc, &status);
if (U_FAILURE(status)) {
log_err("ucal_setDateTime failed: %s\n", myErrorName(status));
log_err("ucal_setDateTime failed: %s\n", u_errorName(status));
return;
}
ucal_set(gmtcal, UCAL_MILLISECOND, 0);
date1 = ucal_getMillis(gmtcal, &status);
if (U_FAILURE(status)) {
log_err("ucal_getMillis failed: %s\n", myErrorName(status));
log_err("ucal_getMillis failed: %s\n", u_errorName(status));
return;
}
log_verbose("date = %s\n", u_austrcpy(tempMsgBuf, myDateFormat(datfor, date1)) );
@ -1024,7 +1077,7 @@ static void testZones(int32_t yr, int32_t mo, int32_t dt, int32_t hr, int32_t mn
ucal_setMillis(cal, date1, &status);
if (U_FAILURE(status)) {
log_err("ucal_setMillis() failed: %s\n", myErrorName(status));
log_err("ucal_setMillis() failed: %s\n", u_errorName(status));
return;
}
@ -1032,7 +1085,7 @@ static void testZones(int32_t yr, int32_t mo, int32_t dt, int32_t hr, int32_t mn
offset += ucal_get(cal, UCAL_DST_OFFSET, &status);
if (U_FAILURE(status)) {
log_err("ucal_get() failed: %s\n", myErrorName(status));
log_err("ucal_get() failed: %s\n", u_errorName(status));
return;
}
temp=(double)((double)offset / 1000.0 / 60.0 / 60.0);
@ -1043,7 +1096,7 @@ static void testZones(int32_t yr, int32_t mo, int32_t dt, int32_t hr, int32_t mn
ucal_get(cal, UCAL_SECOND, &status)) * 1000 +
ucal_get(cal, UCAL_MILLISECOND, &status) - offset;
if (U_FAILURE(status)) {
log_err("ucal_get() failed: %s\n", myErrorName(status));
log_err("ucal_get() failed: %s\n", u_errorName(status));
return;
}
@ -1094,7 +1147,7 @@ static void checkDateTime(UCalendar* c,
ucal_get(c, UCAL_MILLISECOND, &status) );
if (U_FAILURE(status)){
log_err("ucal_get failed: %s\n", myErrorName(status));
log_err("ucal_get failed: %s\n", u_errorName(status));
return;
}
@ -1118,7 +1171,7 @@ static void checkDate(UCalendar* c, int32_t y, int32_t m, int32_t d)
ucal_get(c, UCAL_DATE, &status) );
if (U_FAILURE(status)) {
log_err("ucal_get failed: %s\n", myErrorName(status));
log_err("ucal_get failed: %s\n", u_errorName(status));
return;
}
}
@ -1140,13 +1193,13 @@ static void verify1(const char* msg, UCalendar* c, UDateFormat* dat, int32_t yea
ucal_get(c, UCAL_MONTH, &status) == month &&
ucal_get(c, UCAL_DATE, &status) == day) {
if (U_FAILURE(status)) {
log_err("FAIL: Calendar::get failed: %s\n", myErrorName(status));
log_err("FAIL: Calendar::get failed: %s\n", u_errorName(status));
return;
}
log_verbose("PASS: %s\n", msg);
d1=ucal_getMillis(c, &status);
if (U_FAILURE(status)) {
log_err("ucal_getMillis failed: %s\n", myErrorName(status));
log_err("ucal_getMillis failed: %s\n", u_errorName(status));
return;
}
/*log_verbose(austrdup(myDateFormat(dat, d1)) );*/
@ -1155,7 +1208,7 @@ static void verify1(const char* msg, UCalendar* c, UDateFormat* dat, int32_t yea
log_err("FAIL: %s\n", msg);
d1=ucal_getMillis(c, &status);
if (U_FAILURE(status)) {
log_err("ucal_getMillis failed: %s\n", myErrorName(status) );
log_err("ucal_getMillis failed: %s\n", u_errorName(status) );
return;
}
log_err("Got %s Expected %d/%d/%d \n", austrdup(myDateFormat(dat, d1)), year, month + 1, day );
@ -1181,13 +1234,13 @@ static void verify2(const char* msg, UCalendar* c, UDateFormat* dat, int32_t yea
ucal_get(c, UCAL_SECOND, &status) == sec &&
ucal_get(c, UCAL_AM_PM, &status) == am_pm ){
if (U_FAILURE(status)) {
log_err("FAIL: Calendar::get failed: %s\n", myErrorName(status));
log_err("FAIL: Calendar::get failed: %s\n", u_errorName(status));
return;
}
log_verbose("PASS: %s\n", msg);
d1=ucal_getMillis(c, &status);
if (U_FAILURE(status)) {
log_err("ucal_getMillis failed: %s\n", myErrorName(status));
log_err("ucal_getMillis failed: %s\n", u_errorName(status));
return;
}
log_verbose("%s\n" , u_austrcpy(tempMsgBuf, myDateFormat(dat, d1)) );
@ -1196,7 +1249,7 @@ static void verify2(const char* msg, UCalendar* c, UDateFormat* dat, int32_t yea
log_err("FAIL: %s\n", msg);
d1=ucal_getMillis(c, &status);
if (U_FAILURE(status)) {
log_err("ucal_getMillis failed: %s\n", myErrorName(status));
log_err("ucal_getMillis failed: %s\n", u_errorName(status));
return;
}
log_err("Got %s Expected %d/%d/%d/ %d:%d:%d %s\n", austrdup(myDateFormat(dat, d1)),