mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-07 06:25:30 +00:00
ICU-10637 Format/parse using 'r' related gregorian year, C changes part 1 (still need correct num fmt & tests)
X-SVN-Rev: 35341
This commit is contained in:
parent
8791b26095
commit
30e8bc452d
12 changed files with 216 additions and 53 deletions
|
@ -1163,6 +1163,118 @@ Calendar::set(int32_t year, int32_t month, int32_t date, int32_t hour, int32_t m
|
|||
set(UCAL_SECOND, second);
|
||||
}
|
||||
|
||||
// -------------------------------------
|
||||
// For now the full getRelatedYear implementation is here;
|
||||
// per #10752 move the non-default implementation to subclasses
|
||||
// (default implementation will do no year adjustment)
|
||||
|
||||
int32_t Calendar::getRelatedYear(UErrorCode &status) const
|
||||
{
|
||||
if (U_FAILURE(status)) {
|
||||
return 0;
|
||||
}
|
||||
int32_t year = get(UCAL_EXTENDED_YEAR, status);
|
||||
if (U_FAILURE(status)) {
|
||||
return 0;
|
||||
}
|
||||
// modify for calendar type
|
||||
ECalType type = getCalendarType(getType());
|
||||
switch (type) {
|
||||
case CALTYPE_PERSIAN:
|
||||
year += 622; break;
|
||||
case CALTYPE_HEBREW:
|
||||
year -= 3760; break;
|
||||
case CALTYPE_CHINESE:
|
||||
year -= 2637; break;
|
||||
case CALTYPE_INDIAN:
|
||||
year += 79; break;
|
||||
case CALTYPE_COPTIC:
|
||||
year += 284; break;
|
||||
case CALTYPE_ETHIOPIC:
|
||||
year += 8; break;
|
||||
case CALTYPE_ETHIOPIC_AMETE_ALEM:
|
||||
year -=5492; break;
|
||||
case CALTYPE_DANGI:
|
||||
year -= 2333; break;
|
||||
case CALTYPE_ISLAMIC_CIVIL:
|
||||
case CALTYPE_ISLAMIC:
|
||||
case CALTYPE_ISLAMIC_UMALQURA:
|
||||
case CALTYPE_ISLAMIC_TBLA:
|
||||
case CALTYPE_ISLAMIC_RGSA:
|
||||
// ad hoc conversion, improve under #10752
|
||||
{
|
||||
int cycle, offset, shift = 0;
|
||||
if (year >= 1397) {
|
||||
cycle = (year - 1397) / 67;
|
||||
offset = (year - 1397) % 67;
|
||||
shift = 2*cycle + ((offset >= 33)? 1: 0);
|
||||
} else {
|
||||
cycle = (year - 1396) / 67 - 1;
|
||||
offset = -(year - 1396) % 67;
|
||||
shift = 2*cycle + ((offset <= 33)? 1: 0);
|
||||
}
|
||||
year += 579 - shift;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// CALTYPE_GREGORIAN
|
||||
// CALTYPE_JAPANESE
|
||||
// CALTYPE_BUDDHIST
|
||||
// CALTYPE_ROC
|
||||
// CALTYPE_ISO8601
|
||||
// do nothing, EXTENDED_YEAR same as Gregorian
|
||||
break;
|
||||
}
|
||||
return year;
|
||||
}
|
||||
|
||||
// -------------------------------------
|
||||
// For now the full setRelatedYear implementation is here;
|
||||
// per #10752 move the non-default implementation to subclasses
|
||||
// (default implementation will do no year adjustment)
|
||||
|
||||
void Calendar::setRelatedYear(int32_t year)
|
||||
{
|
||||
// modify for calendar type
|
||||
ECalType type = getCalendarType(getType());
|
||||
switch (type) {
|
||||
case CALTYPE_PERSIAN:
|
||||
year -= 622; break;
|
||||
case CALTYPE_HEBREW:
|
||||
year += 3760; break;
|
||||
case CALTYPE_CHINESE:
|
||||
year += 2637; break;
|
||||
case CALTYPE_INDIAN:
|
||||
year -= 79; break;
|
||||
case CALTYPE_COPTIC:
|
||||
year -= 284; break;
|
||||
case CALTYPE_ETHIOPIC:
|
||||
year -= 8; break;
|
||||
case CALTYPE_ETHIOPIC_AMETE_ALEM:
|
||||
year +=5492; break;
|
||||
case CALTYPE_DANGI:
|
||||
year += 2333; break;
|
||||
case CALTYPE_ISLAMIC_CIVIL:
|
||||
case CALTYPE_ISLAMIC:
|
||||
case CALTYPE_ISLAMIC_UMALQURA:
|
||||
case CALTYPE_ISLAMIC_TBLA:
|
||||
case CALTYPE_ISLAMIC_RGSA:
|
||||
// needs adjustment, will do under #10752
|
||||
year -= 578; // handles current year +/- a few
|
||||
break;
|
||||
default:
|
||||
// CALTYPE_GREGORIAN
|
||||
// CALTYPE_JAPANESE
|
||||
// CALTYPE_BUDDHIST
|
||||
// CALTYPE_ROC
|
||||
// CALTYPE_ISO8601
|
||||
// do nothing, EXTENDED_YEAR same as Gregorian
|
||||
break;
|
||||
}
|
||||
// set extended year
|
||||
set(UCAL_EXTENDED_YEAR, year);
|
||||
}
|
||||
|
||||
// -------------------------------------
|
||||
|
||||
void
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* Copyright (C) 1997-2013, International Business Machines Corporation and *
|
||||
* Copyright (C) 1997-2014, International Business Machines Corporation and *
|
||||
* others. All Rights Reserved. *
|
||||
*******************************************************************************
|
||||
*
|
||||
|
@ -47,18 +47,18 @@
|
|||
* resource data.
|
||||
*/
|
||||
|
||||
#define PATTERN_CHARS_LEN 34
|
||||
#define PATTERN_CHARS_LEN 35
|
||||
|
||||
/**
|
||||
* Unlocalized date-time pattern characters. For example: 'y', 'd', etc. All
|
||||
* locales use the same these unlocalized pattern characters.
|
||||
*/
|
||||
static const UChar gPatternChars[] = {
|
||||
// GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXx
|
||||
// GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXxr
|
||||
0x47, 0x79, 0x4D, 0x64, 0x6B, 0x48, 0x6D, 0x73, 0x53, 0x45,
|
||||
0x44, 0x46, 0x77, 0x57, 0x61, 0x68, 0x4B, 0x7A, 0x59, 0x65,
|
||||
0x75, 0x67, 0x41, 0x5A, 0x76, 0x63, 0x4c, 0x51, 0x71, 0x56,
|
||||
0x55, 0x4F, 0x58, 0x78, 0
|
||||
0x55, 0x4F, 0x58, 0x78, 0x72, 0
|
||||
};
|
||||
|
||||
/* length of an array */
|
||||
|
@ -1198,31 +1198,41 @@ DateFormatSymbols::getPatternCharIndex(UChar c) {
|
|||
}
|
||||
}
|
||||
|
||||
static const uint32_t kNumericFields =
|
||||
((uint32_t)1 << UDAT_YEAR_FIELD) | // y
|
||||
((uint32_t)1 << UDAT_MONTH_FIELD) | // M or MM
|
||||
((uint32_t)1 << UDAT_DATE_FIELD) | // d
|
||||
((uint32_t)1 << UDAT_HOUR_OF_DAY1_FIELD) | // k
|
||||
((uint32_t)1 << UDAT_HOUR_OF_DAY0_FIELD) | // H
|
||||
((uint32_t)1 << UDAT_MINUTE_FIELD) | // m
|
||||
((uint32_t)1 << UDAT_SECOND_FIELD) | // s
|
||||
((uint32_t)1 << UDAT_FRACTIONAL_SECOND_FIELD) | // S
|
||||
((uint32_t)1 << UDAT_DAY_OF_YEAR_FIELD) | // D
|
||||
((uint32_t)1 << UDAT_DAY_OF_WEEK_IN_MONTH_FIELD) | // F
|
||||
((uint32_t)1 << UDAT_WEEK_OF_YEAR_FIELD) | // w
|
||||
((uint32_t)1 << UDAT_WEEK_OF_MONTH_FIELD) | // W
|
||||
((uint32_t)1 << UDAT_HOUR1_FIELD) | // h
|
||||
((uint32_t)1 << UDAT_HOUR0_FIELD) | // K
|
||||
((uint32_t)1 << UDAT_YEAR_WOY_FIELD) | // Y
|
||||
((uint32_t)1 << UDAT_DOW_LOCAL_FIELD) | // e
|
||||
((uint32_t)1 << UDAT_EXTENDED_YEAR_FIELD); // u
|
||||
static const uint64_t kNumericFieldsAlways =
|
||||
((uint64_t)1 << UDAT_YEAR_FIELD) | // y
|
||||
((uint64_t)1 << UDAT_DATE_FIELD) | // d
|
||||
((uint64_t)1 << UDAT_HOUR_OF_DAY1_FIELD) | // k
|
||||
((uint64_t)1 << UDAT_HOUR_OF_DAY0_FIELD) | // H
|
||||
((uint64_t)1 << UDAT_MINUTE_FIELD) | // m
|
||||
((uint64_t)1 << UDAT_SECOND_FIELD) | // s
|
||||
((uint64_t)1 << UDAT_FRACTIONAL_SECOND_FIELD) | // S
|
||||
((uint64_t)1 << UDAT_DAY_OF_YEAR_FIELD) | // D
|
||||
((uint64_t)1 << UDAT_DAY_OF_WEEK_IN_MONTH_FIELD) | // F
|
||||
((uint64_t)1 << UDAT_WEEK_OF_YEAR_FIELD) | // w
|
||||
((uint64_t)1 << UDAT_WEEK_OF_MONTH_FIELD) | // W
|
||||
((uint64_t)1 << UDAT_HOUR1_FIELD) | // h
|
||||
((uint64_t)1 << UDAT_HOUR0_FIELD) | // K
|
||||
((uint64_t)1 << UDAT_YEAR_WOY_FIELD) | // Y
|
||||
((uint64_t)1 << UDAT_EXTENDED_YEAR_FIELD) | // u
|
||||
((uint64_t)1 << UDAT_JULIAN_DAY_FIELD) | // g
|
||||
((uint64_t)1 << UDAT_MILLISECONDS_IN_DAY_FIELD) | // A
|
||||
((uint64_t)1 << UDAT_RELATED_YEAR_FIELD); // r
|
||||
|
||||
static const uint64_t kNumericFieldsForCount12 =
|
||||
((uint64_t)1 << UDAT_MONTH_FIELD) | // M or MM
|
||||
((uint64_t)1 << UDAT_DOW_LOCAL_FIELD) | // e or ee
|
||||
((uint64_t)1 << UDAT_STANDALONE_DAY_FIELD) | // c or cc
|
||||
((uint64_t)1 << UDAT_STANDALONE_MONTH_FIELD) | // L or LL
|
||||
((uint64_t)1 << UDAT_QUARTER_FIELD) | // Q or QQ
|
||||
((uint64_t)1 << UDAT_STANDALONE_QUARTER_FIELD); // q or qq
|
||||
|
||||
UBool U_EXPORT2
|
||||
DateFormatSymbols::isNumericField(UDateFormatField f, int32_t count) {
|
||||
return
|
||||
f != UDAT_FIELD_COUNT &&
|
||||
(kNumericFields & ((uint32_t)1 << f)) != 0 &&
|
||||
(f != UDAT_MONTH_FIELD || count < 3);
|
||||
if (f == UDAT_FIELD_COUNT) {
|
||||
return FALSE;
|
||||
}
|
||||
uint64_t flag = ((uint64_t)1 << f);
|
||||
return ((kNumericFieldsAlways & flag) != 0 || ((kNumericFieldsForCount12 & flag) != 0 && count < 3));
|
||||
}
|
||||
|
||||
UBool U_EXPORT2
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* Copyright (C) 2007-2008, International Business Machines Corporation and
|
||||
* Copyright (C) 2007-2008,2014, International Business Machines Corporation and
|
||||
* others. All Rights Reserved.
|
||||
*******************************************************************************
|
||||
*
|
||||
|
@ -74,6 +74,7 @@
|
|||
#define CAP_Q ((UChar)0x0051)
|
||||
#define CAP_S ((UChar)0x0053)
|
||||
#define CAP_T ((UChar)0x0054)
|
||||
#define CAP_U ((UChar)0x0055)
|
||||
#define CAP_V ((UChar)0x0056)
|
||||
#define CAP_W ((UChar)0x0057)
|
||||
#define CAP_Y ((UChar)0x0059)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (C) 2008-2013, International Business Machines Corporation and
|
||||
* Copyright (C) 2008-2014, International Business Machines Corporation and
|
||||
* others. All Rights Reserved.
|
||||
*******************************************************************************
|
||||
*
|
||||
|
@ -820,6 +820,8 @@ DateIntervalFormat::getDateTimeSkeleton(const UnicodeString& skeleton,
|
|||
case LOW_G:
|
||||
case LOW_E:
|
||||
case LOW_C:
|
||||
case CAP_U:
|
||||
case LOW_R:
|
||||
normalizedDateSkeleton.append(ch);
|
||||
dateSkeleton.append(ch);
|
||||
break;
|
||||
|
@ -1470,7 +1472,10 @@ DateIntervalFormat::fgCalendarFieldToPatternLetter[] =
|
|||
/*wWd*/ LOW_W, CAP_W, LOW_D,
|
||||
/*DEF*/ CAP_D, CAP_E, CAP_F,
|
||||
/*ahH*/ LOW_A, LOW_H, CAP_H,
|
||||
/*m..*/ LOW_M,
|
||||
/*msS*/ LOW_M, LOW_S, CAP_S, // MINUTE, SECOND, MILLISECOND
|
||||
/*z.Y*/ LOW_Z, SPACE, CAP_Y, // ZONE_OFFSET, DST_OFFSET, YEAR_WOY,
|
||||
/*eug*/ LOW_E, LOW_U, LOW_G, // DOW_LOCAL, EXTENDED_YEAR, JULIAN_DAY,
|
||||
/*A..*/ CAP_A, SPACE, SPACE, // MILLISECONDS_IN_DAY, IS_LEAP_MONTH, FIELD_COUNT
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/*
|
||||
*******************************************************************************
|
||||
* Copyright (C) 2007-2013, International Business Machines Corporation and
|
||||
* Copyright (C) 2007-2014, International Business Machines Corporation and
|
||||
* others. All Rights Reserved.
|
||||
*******************************************************************************
|
||||
*
|
||||
|
@ -144,6 +144,7 @@ static const dtTypeElem dtTypes[] = {
|
|||
{LOW_Y, UDATPG_YEAR_FIELD, DT_NUMERIC, 1, 20},
|
||||
{CAP_Y, UDATPG_YEAR_FIELD, DT_NUMERIC + DT_DELTA, 1, 20},
|
||||
{LOW_U, UDATPG_YEAR_FIELD, DT_NUMERIC + 2*DT_DELTA, 1, 20},
|
||||
{LOW_R, UDATPG_YEAR_FIELD, DT_NUMERIC + 3*DT_DELTA, 1, 20},
|
||||
{CAP_U, UDATPG_YEAR_FIELD, DT_SHORT, 1, 3},
|
||||
{CAP_U, UDATPG_YEAR_FIELD, DT_LONG, 4, 0},
|
||||
{CAP_U, UDATPG_YEAR_FIELD, DT_NARROW, 5, 0},
|
||||
|
|
|
@ -126,8 +126,9 @@ static const UDateFormatField kDateFields[] = {
|
|||
UDAT_STANDALONE_MONTH_FIELD,
|
||||
UDAT_QUARTER_FIELD,
|
||||
UDAT_STANDALONE_QUARTER_FIELD,
|
||||
UDAT_YEAR_NAME_FIELD };
|
||||
static const int8_t kDateFieldsCount = 15;
|
||||
UDAT_YEAR_NAME_FIELD,
|
||||
UDAT_RELATED_YEAR_FIELD };
|
||||
static const int8_t kDateFieldsCount = 16;
|
||||
|
||||
static const UDateFormatField kTimeFields[] = {
|
||||
UDAT_HOUR_OF_DAY1_FIELD,
|
||||
|
@ -203,11 +204,12 @@ static const int32_t gFieldRangeBias[] = {
|
|||
1, // 'L' - UDAT_STANDALONE_MONTH_FIELD
|
||||
-1, // 'Q' - UDAT_QUARTER_FIELD (1-4?)
|
||||
-1, // 'q' - UDAT_STANDALONE_QUARTER_FIELD
|
||||
-1 // 'V' - UDAT_TIMEZONE_SPECIAL_FIELD
|
||||
-1, // 'V' - UDAT_TIMEZONE_SPECIAL_FIELD
|
||||
-1, // 'U' - UDAT_YEAR_NAME_FIELD
|
||||
-1, // 'O' - UDAT_TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD
|
||||
-1, // 'X' - UDAT_TIMEZONE_ISO_FIELD
|
||||
-1, // 'x' - UDAT_TIMEZONE_ISO_LOCAL_FIELD
|
||||
-1, // 'r' - UDAT_RELATED_YEAR_FIELD
|
||||
};
|
||||
|
||||
// When calendar uses hebr numbering (i.e. he@calendar=hebrew),
|
||||
|
@ -956,10 +958,10 @@ SimpleDateFormat::fgCalendarFieldToLevel[] =
|
|||
/*wW*/ 20, 30,
|
||||
/*dDEF*/ 30, 20, 30, 30,
|
||||
/*ahHm*/ 40, 50, 50, 60,
|
||||
/*sS..*/ 70, 80,
|
||||
/*sS*/ 70, 80,
|
||||
/*z?Y*/ 0, 0, 10,
|
||||
/*eug*/ 30, 10, 0,
|
||||
/*A*/ 40
|
||||
/*A?.*/ 40, 0, 0
|
||||
};
|
||||
|
||||
|
||||
|
@ -976,7 +978,7 @@ SimpleDateFormat::fgPatternCharToLevel[] = {
|
|||
// a b c d e f g h i j k l m n o
|
||||
-1, 40, -1, 30, 30, 30, -1, 0, 50, -1, -1, 50, -1, 60, -1, -1,
|
||||
// p q r s t u v w x y z
|
||||
-1, 20, -1, 70, -1, 10, 0, 20, 0, 10, 0, -1, -1, -1, -1, -1
|
||||
-1, 20, 10, 70, -1, 10, 0, 20, 0, 10, 0, -1, -1, -1, -1, -1
|
||||
};
|
||||
|
||||
|
||||
|
@ -1001,6 +1003,7 @@ SimpleDateFormat::fgPatternIndexToCalendarField[] =
|
|||
/*U*/ UCAL_YEAR,
|
||||
/*O*/ UCAL_ZONE_OFFSET,
|
||||
/*Xx*/ UCAL_ZONE_OFFSET, UCAL_ZONE_OFFSET,
|
||||
/*r*/ UCAL_EXTENDED_YEAR,
|
||||
};
|
||||
|
||||
// Map index into pattern character string to DateFormat field number
|
||||
|
@ -1023,6 +1026,7 @@ SimpleDateFormat::fgPatternIndexToDateFormatField[] = {
|
|||
/*U*/ UDAT_YEAR_NAME_FIELD,
|
||||
/*O*/ UDAT_TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD,
|
||||
/*Xx*/ UDAT_TIMEZONE_ISO_FIELD, UDAT_TIMEZONE_ISO_LOCAL_FIELD,
|
||||
/*r*/ UDAT_RELATED_YEAR_FIELD,
|
||||
};
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
|
@ -1242,7 +1246,7 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo,
|
|||
}
|
||||
|
||||
UCalendarDateFields field = fgPatternIndexToCalendarField[patternCharIndex];
|
||||
int32_t value = cal.get(field, status);
|
||||
int32_t value = (patternCharIndex != UDAT_RELATED_YEAR_FIELD)? cal.get(field, status): cal.getRelatedYear(status);
|
||||
if (U_FAILURE(status)) {
|
||||
return;
|
||||
}
|
||||
|
@ -3127,6 +3131,9 @@ int32_t SimpleDateFormat::subParse(const UnicodeString& text, int32_t& start, UC
|
|||
case UDAT_STANDALONE_QUARTER_FIELD:
|
||||
cal.set(UCAL_MONTH, (value - 1) * 3);
|
||||
break;
|
||||
case UDAT_RELATED_YEAR_FIELD:
|
||||
cal.setRelatedYear(value);
|
||||
break;
|
||||
default:
|
||||
cal.set(field, value);
|
||||
break;
|
||||
|
|
|
@ -67,16 +67,19 @@ static UCalendarDateFields gDateFieldMapping[] = {
|
|||
UCAL_EXTENDED_YEAR, // UDAT_EXTENDED_YEAR_FIELD = 20
|
||||
UCAL_JULIAN_DAY, // UDAT_JULIAN_DAY_FIELD = 21
|
||||
UCAL_MILLISECONDS_IN_DAY, // UDAT_MILLISECONDS_IN_DAY_FIELD = 22
|
||||
UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_RFC_FIELD = 23
|
||||
// UCAL_DST_OFFSET also
|
||||
UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_GENERIC_FIELD = 24
|
||||
UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_RFC_FIELD = 23 (also UCAL_DST_OFFSET)
|
||||
UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_GENERIC_FIELD = 24 (also UCAL_DST_OFFSET)
|
||||
UCAL_DOW_LOCAL, // UDAT_STANDALONE_DAY_FIELD = 25
|
||||
UCAL_MONTH, // UDAT_STANDALONE_MONTH_FIELD = 26
|
||||
UCAL_MONTH, // UDAT_QUARTER_FIELD = 27
|
||||
UCAL_MONTH, // UDAT_STANDALONE_QUARTER_FIELD = 28
|
||||
UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_SPECIAL_FIELD = 29
|
||||
UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_SPECIAL_FIELD = 29 (also UCAL_DST_OFFSET)
|
||||
UCAL_YEAR, // UDAT_YEAR_NAME_FIELD = 30
|
||||
UCAL_FIELD_COUNT, // UDAT_FIELD_COUNT = 31
|
||||
UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD = 31 (also UCAL_DST_OFFSET)
|
||||
UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_ISO_FIELD = 32 (also UCAL_DST_OFFSET)
|
||||
UCAL_ZONE_OFFSET, // UDAT_TIMEZONE_ISO_LOCAL_FIELD = 33 (also UCAL_DST_OFFSET)
|
||||
UCAL_EXTENDED_YEAR, // UDAT_RELATED_YEAR_FIELD = 34 (not an exact match)
|
||||
UCAL_FIELD_COUNT, // UDAT_FIELD_COUNT = 35
|
||||
// UCAL_IS_LEAP_MONTH is not the target of a mapping
|
||||
};
|
||||
|
||||
|
|
|
@ -2412,6 +2412,20 @@ private:
|
|||
*/
|
||||
Locale getLocale(ULocDataLocaleType type, UErrorCode &status) const;
|
||||
|
||||
/**
|
||||
* @return The related Gregorian year; will be obtained by modifying the value
|
||||
* obtained by get from UCAL_EXTENDED_YEAR field
|
||||
* @internal
|
||||
*/
|
||||
virtual int32_t getRelatedYear(UErrorCode &status) const;
|
||||
|
||||
/**
|
||||
* @param year The related Gregorian year to set; will be modified as necessary then
|
||||
* set in UCAL_EXTENDED_YEAR field
|
||||
* @internal
|
||||
*/
|
||||
virtual void setRelatedYear(int32_t year);
|
||||
|
||||
#ifndef U_HIDE_INTERNAL_API
|
||||
/** Get the locale for this calendar object. You can choose between valid and actual locale.
|
||||
* @param type type of the locale we're looking for (valid or actual)
|
||||
|
|
|
@ -756,14 +756,23 @@ typedef enum UDateFormatField {
|
|||
|
||||
/**
|
||||
* FieldPosition selector for 'x' field alignment,
|
||||
* corresponding to the UCAL_ZONE_OFFSET and UCAL_DST_OFFSETfields.
|
||||
* corresponding to the UCAL_ZONE_OFFSET and UCAL_DST_OFFSET fields.
|
||||
* This displays the ISO 8601 local time offset format.
|
||||
* @draft ICU 51
|
||||
*/
|
||||
UDAT_TIMEZONE_ISO_LOCAL_FIELD = 33,
|
||||
#endif /* U_HIDE_DRAFT_API */
|
||||
|
||||
#ifndef U_HIDE_INTERNAL_API
|
||||
/**
|
||||
* FieldPosition and UFieldPosition selector for 'r' field alignment,
|
||||
* no directly corresponding UCAL_ field.
|
||||
* @internal ICU 53
|
||||
*/
|
||||
UDAT_RELATED_YEAR_FIELD = 34,
|
||||
#endif /* U_HIDE_INTERNAL_API */
|
||||
|
||||
/**
|
||||
* Number of FieldPosition and UFieldPosition selectors for
|
||||
* DateFormat and UDateFormat.
|
||||
* Valid selectors range from 0 to UDAT_FIELD_COUNT-1.
|
||||
|
@ -771,7 +780,7 @@ typedef enum UDateFormatField {
|
|||
* in the future.
|
||||
* @stable ICU 3.0
|
||||
*/
|
||||
UDAT_FIELD_COUNT = 34
|
||||
UDAT_FIELD_COUNT = 35
|
||||
|
||||
} UDateFormatField;
|
||||
|
||||
|
|
|
@ -647,7 +647,7 @@ static void TestSymbols()
|
|||
VerifygetSymbols(def, UDAT_QUARTERS, 3, "4th quarter");
|
||||
VerifygetSymbols(fr, UDAT_SHORT_QUARTERS, 1, "T2");
|
||||
VerifygetSymbols(def, UDAT_SHORT_QUARTERS, 2, "Q3");
|
||||
VerifygetSymbols(def,UDAT_LOCALIZED_CHARS, 0, "GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXx");
|
||||
VerifygetSymbols(def,UDAT_LOCALIZED_CHARS, 0, "GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXxr");
|
||||
|
||||
|
||||
if(result != NULL) {
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/********************************************************************
|
||||
* COPYRIGHT:
|
||||
* Copyright (c) 1997-2013, International Business Machines Corporation and
|
||||
* Copyright (c) 1997-2014, International Business Machines Corporation and
|
||||
* others. All Rights Reserved.
|
||||
********************************************************************/
|
||||
/********************************************************************************
|
||||
|
@ -92,7 +92,7 @@ void Test4029195()
|
|||
udat_applyPattern(df, TRUE, temp, u_strlen(temp));
|
||||
|
||||
todayS =myFormatit(df, today);
|
||||
log_verbose("After teh pattern is applied\n today: %s\n", austrdup(todayS) );
|
||||
log_verbose("After the pattern is applied\n today: %s\n", austrdup(todayS) );
|
||||
parsepos=0;
|
||||
d1=udat_parse(df, todayS, u_strlen(todayS), &parsepos, &status);
|
||||
if(U_FAILURE(status))
|
||||
|
@ -106,7 +106,7 @@ void Test4029195()
|
|||
log_verbose("round trip: %s\n", austrdup(rt) );
|
||||
|
||||
if(u_strcmp(rt, todayS)!=0) {
|
||||
log_err("Fail: Want %s Got %s\n", austrdup(todayS), austrdup(rt) );
|
||||
log_err("Fail: Want %s Got %s\n", austrdup(todayS), austrdup(rt) );
|
||||
}
|
||||
else
|
||||
log_verbose("Pass: parse and format working fine\n");
|
||||
|
|
|
@ -423,7 +423,7 @@ DateFormatTest::escape(UnicodeString& s)
|
|||
/**
|
||||
* This MUST be kept in sync with DateFormatSymbols.gPatternChars.
|
||||
*/
|
||||
static const char* PATTERN_CHARS = "GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXx";
|
||||
static const char* PATTERN_CHARS = "GyMdkHmsSEDFwWahKzYeugAZvcLQqVUOXxr";
|
||||
|
||||
/**
|
||||
* A list of the names of all the fields in DateFormat.
|
||||
|
@ -464,6 +464,7 @@ static const char* DATEFORMAT_FIELD_NAMES[] = {
|
|||
"TIMEZONE_LOCALIZED_GMT_OFFSET_FIELD",
|
||||
"TIMEZONE_ISO_FIELD",
|
||||
"TIMEZONE_ISO_LOCAL_FIELD",
|
||||
"RELATED_YEAR_FIELD",
|
||||
};
|
||||
|
||||
static const int32_t DATEFORMAT_FIELD_NAMES_LENGTH =
|
||||
|
@ -519,22 +520,22 @@ void DateFormatTest::TestFieldPosition() {
|
|||
"", "1997", "August", "13", "", "", "34", "12", "", "Wednesday",
|
||||
"", "", "", "", "PM", "2", "", "Pacific Daylight Time", "", "",
|
||||
"", "", "", "", "", "", "", "", "", "",
|
||||
"", "", "", "",
|
||||
"", "", "", "", "",
|
||||
|
||||
"", "1997", "ao\\u00FBt", "13", "", "14", "34", "12", "", "mercredi",
|
||||
"", "", "", "", "", "", "", "heure avanc\\u00e9e du Pacifique", "", "",
|
||||
"", "", "", "", "", "", "", "", "", "",
|
||||
"", "", "", "",
|
||||
"", "", "", "", "",
|
||||
|
||||
"AD", "1997", "8", "13", "14", "14", "34", "12", "5", "Wed",
|
||||
"225", "2", "33", "3", "PM", "2", "2", "PDT", "1997", "4",
|
||||
"1997", "2450674", "52452513", "-0700", "PT", "4", "8", "3", "3", "uslax",
|
||||
"1997", "GMT-7", "-07", "-07",
|
||||
"1997", "GMT-7", "-07", "-07", "1997",
|
||||
|
||||
"Anno Domini", "1997", "August", "0013", "0014", "0014", "0034", "0012", "5130", "Wednesday",
|
||||
"0225", "0002", "0033", "0003", "PM", "0002", "0002", "Pacific Daylight Time", "1997", "Wednesday",
|
||||
"1997", "2450674", "52452513", "GMT-07:00", "Pacific Time", "Wednesday", "August", "3rd quarter", "3rd quarter", "Los Angeles Time",
|
||||
"1997", "GMT-07:00", "-0700", "-0700",
|
||||
"1997", "GMT-07:00", "-0700", "-0700","1997",
|
||||
};
|
||||
|
||||
const int32_t EXPECTED_LENGTH = sizeof(EXPECTED)/sizeof(EXPECTED[0]);
|
||||
|
|
Loading…
Add table
Reference in a new issue