Search in sources :

Example 1 with ChineseDateFormat

use of android.icu.text.ChineseDateFormat in project j2objc by google.

the class ChineseTest method Test6510.

@Test
public void Test6510() {
    Calendar gregorianCalendar;
    ChineseCalendar chineseCalendar, chineseCalendar2;
    ChineseDateFormat dateFormat;
    SimpleDateFormat simpleDateFormat;
    simpleDateFormat = new android.icu.text.SimpleDateFormat("MM/dd/yyyy G 'at' HH:mm:ss vvvv", Locale.US);
    dateFormat = new android.icu.text.ChineseDateFormat("MM/dd/yyyy(G) HH:mm:ss", Locale.CHINA);
    // lunar to gregorian
    chineseCalendar = new ChineseCalendar(77, 26, Calendar.JANUARY, 0, 6, 0, 0, 0);
    // coverage
    assertEquals("equivalent ChineseCalendar() constructors", chineseCalendar, new ChineseCalendar(77, 26, Calendar.JANUARY, 0, 6));
    gregorianCalendar = Calendar.getInstance(Locale.US);
    gregorianCalendar.setTime(chineseCalendar.getTime());
    // gregorian to lunar
    chineseCalendar2 = new ChineseCalendar();
    chineseCalendar2.setTimeInMillis(gregorianCalendar.getTimeInMillis());
    // validate roundtrip
    if (chineseCalendar.getTimeInMillis() != chineseCalendar2.getTimeInMillis()) {
        errln("time1: " + chineseCalendar.getTimeInMillis());
        errln("time2: " + chineseCalendar2.getTimeInMillis());
        errln("Lunar [MM/dd/y(G) HH:mm:ss] " + dateFormat.format(chineseCalendar));
        errln("**PROBLEM Grego [MM/dd/y(G) HH:mm:ss] " + simpleDateFormat.format(gregorianCalendar));
        errln("Grego [MM/dd/y(G) HH:mm:ss] " + simpleDateFormat.format(gregorianCalendar));
        errln("Lunar [MM/dd/y(G) HH:mm:ss] " + dateFormat.format(chineseCalendar2));
    }
}
Also used : ChineseCalendar(android.icu.util.ChineseCalendar) ChineseDateFormat(android.icu.text.ChineseDateFormat) ChineseCalendar(android.icu.util.ChineseCalendar) GregorianCalendar(android.icu.util.GregorianCalendar) Calendar(android.icu.util.Calendar) SimpleDateFormat(android.icu.text.SimpleDateFormat) ChineseDateFormat(android.icu.text.ChineseDateFormat) SimpleDateFormat(android.icu.text.SimpleDateFormat) Test(org.junit.Test)

Example 2 with ChineseDateFormat

use of android.icu.text.ChineseDateFormat in project j2objc by google.

the class DateFormatTest method TestCoverage.

@Test
public void TestCoverage() {
    Date now = new Date();
    Calendar cal = new GregorianCalendar();
    DateFormat f = DateFormat.getTimeInstance();
    logln("time: " + f.format(now));
    // sigh, everyone overrides this
    int hash = f.hashCode();
    f = DateFormat.getInstance(cal);
    if (hash == f.hashCode()) {
        errln("FAIL: hashCode equal for inequal objects");
    }
    logln("time again: " + f.format(now));
    f = DateFormat.getTimeInstance(cal, DateFormat.FULL);
    logln("time yet again: " + f.format(now));
    f = DateFormat.getDateInstance();
    logln("time yet again: " + f.format(now));
    ICUResourceBundle rb = (ICUResourceBundle) UResourceBundle.getBundleInstance(ICUData.ICU_BASE_NAME, "de_DE");
    DateFormatSymbols sym = new DateFormatSymbols(rb, Locale.GERMANY);
    DateFormatSymbols sym2 = (DateFormatSymbols) sym.clone();
    if (sym.hashCode() != sym2.hashCode()) {
        errln("fail, date format symbols hashcode not equal");
    }
    if (!sym.equals(sym2)) {
        errln("fail, date format symbols not equal");
    }
    Locale foo = new Locale("fu", "FU", "BAR");
    rb = null;
    sym = new DateFormatSymbols(GregorianCalendar.class, foo);
    sym.equals(null);
    sym = new ChineseDateFormatSymbols();
    sym = new ChineseDateFormatSymbols(new Locale("en_US"));
    try {
        sym = new ChineseDateFormatSymbols(null, new Locale("en_US"));
        errln("ChineseDateFormatSymbols(Calender, Locale) was suppose to return a null " + "pointer exception for a null paramater.");
    } catch (Exception e) {
    }
    sym = new ChineseDateFormatSymbols(new ChineseCalendar(), new Locale("en_US"));
    try {
        sym = new ChineseDateFormatSymbols(null, new ULocale("en_US"));
        errln("ChineseDateFormatSymbols(Calender, ULocale) was suppose to return a null " + "pointer exception for a null paramater.");
    } catch (Exception e) {
    }
    sym = new ChineseDateFormatSymbols(new ChineseCalendar(), foo);
    // cover new ChineseDateFormatSymbols(Calendar, ULocale)
    ChineseCalendar ccal = new ChineseCalendar();
    // gclsh1 add
    sym = new ChineseDateFormatSymbols(ccal, ULocale.CHINA);
    StringBuffer buf = new StringBuffer();
    FieldPosition pos = new FieldPosition(0);
    f.format((Object) cal, buf, pos);
    f.format((Object) now, buf, pos);
    f.format((Object) new Long(now.getTime()), buf, pos);
    try {
        f.format((Object) "Howdy", buf, pos);
    } catch (Exception e) {
    }
    NumberFormat nf = f.getNumberFormat();
    f.setNumberFormat(nf);
    boolean lenient = f.isLenient();
    f.setLenient(lenient);
    ULocale uloc = f.getLocale(ULocale.ACTUAL_LOCALE);
    DateFormat sdfmt = new SimpleDateFormat();
    if (f.hashCode() != f.hashCode()) {
        errln("hashCode is not stable");
    }
    if (!f.equals(f)) {
        errln("f != f");
    }
    if (f.equals(null)) {
        errln("f should not equal null");
    }
    if (f.equals(sdfmt)) {
        errln("A time instance shouldn't equal a default date format");
    }
    Date d;
    {
        ChineseDateFormat fmt = new ChineseDateFormat("yymm", Locale.US);
        try {
            // fewer symbols than required 2
            fmt.parse("2");
            errln("whoops");
        } catch (ParseException e) {
            logln("ok");
        }
        try {
            // should succeed with obeycount
            fmt.parse("2255");
            logln("ok");
        } catch (ParseException e) {
            errln("whoops");
        }
        try {
            // not a number, should fail
            fmt.parse("ni hao");
            errln("whoops ni hao");
        } catch (ParseException e) {
            logln("ok ni hao");
        }
    }
    {
        Calendar xcal = new GregorianCalendar();
        xcal.set(Calendar.HOUR_OF_DAY, 0);
        DateFormat fmt = new SimpleDateFormat("k");
        StringBuffer xbuf = new StringBuffer();
        FieldPosition fpos = new FieldPosition(Calendar.HOUR_OF_DAY);
        fmt.format(xcal, xbuf, fpos);
        try {
            fmt.parse(xbuf.toString());
            logln("ok");
            xbuf.setLength(0);
            xcal.set(Calendar.HOUR_OF_DAY, 25);
            fmt.format(xcal, xbuf, fpos);
            Date d2 = fmt.parse(xbuf.toString());
            logln("ok again - d2=" + d2);
        } catch (ParseException e) {
            errln("whoops");
        }
    }
    {
        // cover gmt+hh:mm
        DateFormat fmt = new SimpleDateFormat("MM/dd/yy z");
        try {
            d = fmt.parse("07/10/53 GMT+10:00");
            logln("ok : d = " + d);
        } catch (ParseException e) {
            errln("Parse of 07/10/53 GMT+10:00 for pattern MM/dd/yy z");
        }
        // cover invalid separator after GMT
        {
            ParsePosition pp = new ParsePosition(0);
            String text = "07/10/53 GMT=10:00";
            d = fmt.parse(text, pp);
            if (pp.getIndex() != 12) {
                errln("Parse of 07/10/53 GMT=10:00 for pattern MM/dd/yy z");
            }
            logln("Parsing of the text stopped at pos: " + pp.getIndex() + " as expected and length is " + text.length());
        }
        // cover bad text after GMT+.
        try {
            fmt.parse("07/10/53 GMT+blecch");
            logln("ok GMT+blecch");
        } catch (ParseException e) {
            errln("whoops GMT+blecch");
        }
        // cover bad text after GMT+hh:.
        try {
            fmt.parse("07/10/53 GMT+07:blecch");
            logln("ok GMT+xx:blecch");
        } catch (ParseException e) {
            errln("whoops GMT+xx:blecch");
        }
        // cover no ':' GMT+#, # < 24 (hh)
        try {
            d = fmt.parse("07/10/53 GMT+07");
            logln("ok GMT+07");
        } catch (ParseException e) {
            errln("Parse of 07/10/53 GMT+07 for pattern MM/dd/yy z");
        }
        // cover no ':' GMT+#, # > 24 (hhmm)
        try {
            d = fmt.parse("07/10/53 GMT+0730");
            logln("ok");
        } catch (ParseException e) {
            errln("Parse of 07/10/53 GMT+0730 for pattern MM/dd/yy z");
        }
        // cover GMT+#, # with second field
        try {
            d = fmt.parse("07/10/53 GMT+07:30:15");
            logln("ok GMT+07:30:15");
        } catch (ParseException e) {
            errln("Parse of 07/10/53 GMT+07:30:15 for pattern MM/dd/yy z");
        }
        // cover no ':' GMT+#, # with second field, no leading zero
        try {
            d = fmt.parse("07/10/53 GMT+73015");
            logln("ok GMT+73015");
        } catch (ParseException e) {
            errln("Parse of 07/10/53 GMT+73015 for pattern MM/dd/yy z");
        }
        // cover no ':' GMT+#, # with 1 digit second field
        try {
            d = fmt.parse("07/10/53 GMT+07300");
            logln("ok GMT+07300");
        } catch (ParseException e) {
            errln("Parse of 07/10/53 GMT+07300 for pattern MM/dd/yy z");
        }
        // cover raw digits with no leading sign (bad RFC822)
        try {
            d = fmt.parse("07/10/53 07");
            errln("Parse of 07/10/53 07 for pattern MM/dd/yy z passed!");
        } catch (ParseException e) {
            logln("ok");
        }
        // cover raw digits (RFC822)
        try {
            d = fmt.parse("07/10/53 +07");
            logln("ok");
        } catch (ParseException e) {
            errln("Parse of 07/10/53 +07 for pattern MM/dd/yy z failed");
        }
        // cover raw digits (RFC822)
        try {
            d = fmt.parse("07/10/53 -0730");
            logln("ok");
        } catch (ParseException e) {
            errln("Parse of 07/10/53 -00730 for pattern MM/dd/yy z failed");
        }
        // cover raw digits (RFC822) in DST
        try {
            fmt.setTimeZone(TimeZone.getTimeZone("PDT"));
            d = fmt.parse("07/10/53 -0730");
            logln("ok");
        } catch (ParseException e) {
            errln("Parse of 07/10/53 -0730 for pattern MM/dd/yy z failed");
        }
    }
    // TODO: revisit toLocalizedPattern
    if (false) {
        SimpleDateFormat fmt = new SimpleDateFormat("aabbcc");
        try {
            String pat = fmt.toLocalizedPattern();
            errln("whoops, shouldn't have been able to localize aabbcc");
        } catch (IllegalArgumentException e) {
            logln("aabbcc localize ok");
        }
    }
    {
        SimpleDateFormat fmt = new SimpleDateFormat("'aabbcc");
        try {
            fmt.toLocalizedPattern();
            errln("whoops, localize unclosed quote");
        } catch (IllegalArgumentException e) {
            logln("localize unclosed quote ok");
        }
    }
    {
        SimpleDateFormat fmt = new SimpleDateFormat("MM/dd/yy z");
        // bogus time zone
        String text = "08/15/58 DBDY";
        try {
            fmt.parse(text);
            errln("recognized bogus time zone DBDY");
        } catch (ParseException e) {
            logln("time zone ex ok");
        }
    }
    {
        // force fallback to default timezone when fmt timezone
        // is not named
        SimpleDateFormat fmt = new SimpleDateFormat("MM/dd/yy z");
        // force fallback to default time zone, still fails
        // not in equivalency group
        fmt.setTimeZone(TimeZone.getTimeZone("GMT+0147"));
        String text = "08/15/58 DBDY";
        try {
            fmt.parse(text);
            errln("Parse of 07/10/53 DBDY for pattern MM/dd/yy z passed");
        } catch (ParseException e) {
            logln("time zone ex2 ok");
        }
        // force success on fallback
        text = "08/15/58 " + TimeZone.getDefault().getDisplayName(true, TimeZone.SHORT);
        try {
            fmt.parse(text);
            logln("found default tz");
        } catch (ParseException e) {
            errln("whoops, got parse exception");
        }
    }
    {
        // force fallback to symbols list of timezones when neither
        // fmt and default timezone is named
        SimpleDateFormat fmt = new SimpleDateFormat("MM/dd/yy z");
        TimeZone oldtz = TimeZone.getDefault();
        // nonstandard tz
        TimeZone newtz = TimeZone.getTimeZone("GMT+0137");
        fmt.setTimeZone(newtz);
        // todo: fix security issue
        TimeZone.setDefault(newtz);
        // fallback to symbol list, but fail
        // try to parse the bogus time zone
        String text = "08/15/58 DBDY";
        try {
            fmt.parse(text);
            errln("Parse of 07/10/53 DBDY for pattern MM/dd/yy z passed");
        } catch (ParseException e) {
            logln("time zone ex3 ok");
        } catch (Exception e) {
            // hmmm... this shouldn't happen.  don't want to exit this
            // fn with timezone improperly set, so just in case
            TimeZone.setDefault(oldtz);
            throw new IllegalStateException(e.getMessage());
        }
    }
    {
        // cover getAvailableULocales
        final ULocale[] locales = DateFormat.getAvailableULocales();
        long count = locales.length;
        if (count == 0) {
            errln(" got a empty list for getAvailableULocales");
        } else {
            logln("" + count + " available ulocales");
        }
    }
    {
        // cover DateFormatSymbols.getDateFormatBundle
        cal = new GregorianCalendar();
        Locale loc = Locale.getDefault();
        DateFormatSymbols mysym = new DateFormatSymbols(cal, loc);
        if (mysym == null)
            errln("FAIL: constructs DateFormatSymbols with calendar and locale failed");
        uloc = ULocale.getDefault();
        // These APIs are obsolete and return null
        ResourceBundle resb = DateFormatSymbols.getDateFormatBundle(cal, loc);
        ResourceBundle resb2 = DateFormatSymbols.getDateFormatBundle(cal, uloc);
        ResourceBundle resb3 = DateFormatSymbols.getDateFormatBundle(cal.getClass(), loc);
        ResourceBundle resb4 = DateFormatSymbols.getDateFormatBundle(cal.getClass(), uloc);
        if (resb != null) {
            logln("resb is not null");
        }
        if (resb2 != null) {
            logln("resb2 is not null");
        }
        if (resb3 != null) {
            logln("resb3 is not null");
        }
        if (resb4 != null) {
            logln("resb4 is not null");
        }
    }
    {
        // cover DateFormatSymbols.getInstance
        DateFormatSymbols datsym1 = DateFormatSymbols.getInstance();
        DateFormatSymbols datsym2 = new DateFormatSymbols();
        if (!datsym1.equals(datsym2)) {
            errln("FAIL: DateFormatSymbols returned by getInstance()" + "does not match new DateFormatSymbols().");
        }
        datsym1 = DateFormatSymbols.getInstance(Locale.JAPAN);
        datsym2 = DateFormatSymbols.getInstance(ULocale.JAPAN);
        if (!datsym1.equals(datsym2)) {
            errln("FAIL: DateFormatSymbols returned by getInstance(Locale.JAPAN)" + "does not match the one returned by getInstance(ULocale.JAPAN).");
        }
    }
    {
        // cover DateFormatSymbols.getAvailableLocales/getAvailableULocales
        Locale[] allLocales = DateFormatSymbols.getAvailableLocales();
        if (allLocales.length == 0) {
            errln("FAIL: Got a empty list for DateFormatSymbols.getAvailableLocales");
        } else {
            logln("PASS: " + allLocales.length + " available locales returned by DateFormatSymbols.getAvailableLocales");
        }
        ULocale[] allULocales = DateFormatSymbols.getAvailableULocales();
        if (allULocales.length == 0) {
            errln("FAIL: Got a empty list for DateFormatSymbols.getAvailableLocales");
        } else {
            logln("PASS: " + allULocales.length + " available locales returned by DateFormatSymbols.getAvailableULocales");
        }
    }
}
Also used : Locale(java.util.Locale) ULocale(android.icu.util.ULocale) ChineseDateFormatSymbols(android.icu.text.ChineseDateFormatSymbols) ParsePosition(java.text.ParsePosition) ChineseCalendar(android.icu.util.ChineseCalendar) ULocale(android.icu.util.ULocale) BuddhistCalendar(android.icu.util.BuddhistCalendar) HebrewCalendar(android.icu.util.HebrewCalendar) IslamicCalendar(android.icu.util.IslamicCalendar) ChineseCalendar(android.icu.util.ChineseCalendar) GregorianCalendar(android.icu.util.GregorianCalendar) Calendar(android.icu.util.Calendar) JapaneseCalendar(android.icu.util.JapaneseCalendar) GregorianCalendar(android.icu.util.GregorianCalendar) ICUResourceBundle(android.icu.impl.ICUResourceBundle) FieldPosition(java.text.FieldPosition) Date(java.util.Date) ParseException(java.text.ParseException) IOException(java.io.IOException) TimeZone(android.icu.util.TimeZone) DateFormat(android.icu.text.DateFormat) ChineseDateFormat(android.icu.text.ChineseDateFormat) SimpleDateFormat(android.icu.text.SimpleDateFormat) DateFormatSymbols(android.icu.text.DateFormatSymbols) ChineseDateFormatSymbols(android.icu.text.ChineseDateFormatSymbols) ICUResourceBundle(android.icu.impl.ICUResourceBundle) UResourceBundle(android.icu.util.UResourceBundle) ResourceBundle(java.util.ResourceBundle) ParseException(java.text.ParseException) ChineseDateFormat(android.icu.text.ChineseDateFormat) SimpleDateFormat(android.icu.text.SimpleDateFormat) NumberFormat(android.icu.text.NumberFormat) Test(org.junit.Test)

Example 3 with ChineseDateFormat

use of android.icu.text.ChineseDateFormat in project j2objc by google.

the class DateFormatTest method TestFormatToCharacterIterator.

/*
    @Test
    public void TestJB4757(){
        DateFormat dfmt = DateFormat.getDateInstance(DateFormat.FULL, ULocale.ROOT);
    }
    */
/*
     * Test case for formatToCharacterIterator
     */
@Test
public void TestFormatToCharacterIterator() {
    // Generate pattern string including all pattern letters with various length
    AttributedCharacterIterator acit;
    final char SEPCHAR = '~';
    String[] patterns = new String[5];
    StringBuffer sb = new StringBuffer();
    for (int i = 0; i < patterns.length; i++) {
        sb.setLength(0);
        for (int j = 0; j < PATTERN_CHARS.length(); j++) {
            if (j != 0) {
                for (int k = 0; k <= i; k++) {
                    sb.append(SEPCHAR);
                }
            }
            char letter = PATTERN_CHARS.charAt(j);
            for (int k = 0; k <= i; k++) {
                sb.append(letter);
            }
        }
        patterns[i] = sb.toString();
    }
    if (isVerbose()) {
        for (int i = 0; i < patterns.length; i++) {
            logln("patterns[" + i + "] = " + patterns[i]);
        }
    }
    Calendar cal = Calendar.getInstance();
    cal.set(2007, Calendar.JULY, 16, 8, 20, 25);
    cal.set(Calendar.MILLISECOND, 567);
    final Date d = cal.getTime();
    // Test AttributedCharacterIterator returned by SimpleDateFormat
    for (int i = 0; i < patterns.length; i++) {
        SimpleDateFormat sdf = new SimpleDateFormat(patterns[i]);
        acit = sdf.formatToCharacterIterator(d);
        int patidx = 0;
        while (true) {
            Map map = acit.getAttributes();
            int limit = acit.getRunLimit();
            if (map.isEmpty()) {
                // Must be pattern literal - '~'
                while (acit.getIndex() < limit) {
                    if (acit.current() != SEPCHAR) {
                        errln("FAIL: Invalid pattern literal at " + acit.current() + " in patterns[" + i + "]");
                    }
                    acit.next();
                }
            } else {
                Set keySet = map.keySet();
                if (keySet.size() == 1) {
                    // Check the attribute
                    Iterator keyIterator = keySet.iterator();
                    DateFormat.Field attr = (DateFormat.Field) keyIterator.next();
                    if (!DATEFORMAT_FIELDS[patidx].equals(attr)) {
                        errln("FAIL: The attribute at " + acit.getIndex() + " in patterns[" + i + "" + "] is " + attr + " - Expected: " + DATEFORMAT_FIELDS[patidx]);
                    }
                } else {
                    // SimpleDateFormat#formatToCharacterIterator never set multiple
                    // attributes to a single text run.
                    errln("FAIL: Multiple attributes were set");
                }
                patidx++;
                // Move to the run limit
                acit.setIndex(limit);
            }
            if (acit.current() == CharacterIterator.DONE) {
                break;
            }
        }
    }
    // ChineseDateFormat has pattern letter 'l' for leap month marker in addition to regular DateFormat
    cal.clear();
    // 26x78-5-30
    cal.set(2009, Calendar.JUNE, 22);
    // non-leap month
    Date nonLeapMonthDate = cal.getTime();
    // 26x78-5*-1
    cal.set(2009, Calendar.JUNE, 23);
    // leap month
    Date leapMonthDate = cal.getTime();
    ChineseDateFormat cdf = new ChineseDateFormat("y'x'G-Ml-d", ULocale.US);
    acit = cdf.formatToCharacterIterator(nonLeapMonthDate);
    Set keys = acit.getAllAttributeKeys();
    if (keys.contains(ChineseDateFormat.Field.IS_LEAP_MONTH)) {
        errln("FAIL: separate IS_LEAP_MONTH field should not be present for a Chinese calendar non-leap date" + cdf.format(nonLeapMonthDate));
    }
    acit = cdf.formatToCharacterIterator(leapMonthDate);
    keys = acit.getAllAttributeKeys();
    if (keys.contains(ChineseDateFormat.Field.IS_LEAP_MONTH)) {
        errln("FAIL: separate IS_LEAP_MONTH field should no longer be present for a Chinese calendar leap date" + cdf.format(leapMonthDate));
    }
}
Also used : HashSet(java.util.HashSet) EnumSet(java.util.EnumSet) Set(java.util.Set) BuddhistCalendar(android.icu.util.BuddhistCalendar) HebrewCalendar(android.icu.util.HebrewCalendar) IslamicCalendar(android.icu.util.IslamicCalendar) ChineseCalendar(android.icu.util.ChineseCalendar) GregorianCalendar(android.icu.util.GregorianCalendar) Calendar(android.icu.util.Calendar) JapaneseCalendar(android.icu.util.JapaneseCalendar) Field(android.icu.text.ChineseDateFormat.Field) Date(java.util.Date) AttributedCharacterIterator(java.text.AttributedCharacterIterator) Field(android.icu.text.ChineseDateFormat.Field) DateFormat(android.icu.text.DateFormat) ChineseDateFormat(android.icu.text.ChineseDateFormat) SimpleDateFormat(android.icu.text.SimpleDateFormat) Iterator(java.util.Iterator) CharacterIterator(java.text.CharacterIterator) AttributedCharacterIterator(java.text.AttributedCharacterIterator) ChineseDateFormat(android.icu.text.ChineseDateFormat) SimpleDateFormat(android.icu.text.SimpleDateFormat) Map(java.util.Map) Test(org.junit.Test)

Example 4 with ChineseDateFormat

use of android.icu.text.ChineseDateFormat in project j2objc by google.

the class DateFormatTest method TestMonthPatterns.

@Test
public void TestMonthPatterns() {
    class ChineseCalTestDate {

        public int era;

        public int year;

        // here 1-based
        public int month;

        public int isLeapMonth;

        public int day;

        // Simple constructor
        public ChineseCalTestDate(int e, int y, int m, int il, int d) {
            era = e;
            year = y;
            month = m;
            isLeapMonth = il;
            day = d;
        }
    }
    ;
    final ChineseCalTestDate[] dates = { // (in chinese era 78) gregorian 2012-4-22
    new ChineseCalTestDate(78, 29, 4, 0, 2), // (in chinese era 78) gregorian 2012-5-22
    new ChineseCalTestDate(78, 29, 4, 1, 2), // (in chinese era 78) gregorian 2012-6-20
    new ChineseCalTestDate(78, 29, 5, 0, 2) };
    class MonthPatternItem {

        public String locale;

        public int style;

        public String[] dateString;

        // Simple constructor
        public MonthPatternItem(String loc, int styl, String dateStr0, String dateStr1, String dateStr2) {
            locale = loc;
            style = styl;
            dateString = new String[3];
            dateString[0] = dateStr0;
            dateString[1] = dateStr1;
            dateString[2] = dateStr2;
        }
    }
    ;
    final MonthPatternItem[] items = { new MonthPatternItem("root@calendar=chinese", DateFormat.LONG, "2012(ren-chen) M04 2", "2012(ren-chen) M04bis 2", "2012(ren-chen) M05 2"), new MonthPatternItem("root@calendar=chinese", DateFormat.SHORT, "2012-04-02", "2012-04bis-02", "2012-05-02"), new MonthPatternItem("root@calendar=chinese", -1, "29-4-2", "29-4bis-2", "29-5-2"), new MonthPatternItem("root@calendar=chinese", -2, "78x29-4-2", "78x29-4bis-2", "78x29-5-2"), new MonthPatternItem("root@calendar=chinese", -3, "ren-chen-4-2", "ren-chen-4bis-2", "ren-chen-5-2"), new MonthPatternItem("root@calendar=chinese", -4, "ren-chen M04 2", "ren-chen M04bis 2", "ren-chen M05 2"), new MonthPatternItem("en@calendar=gregorian", -3, "2012-4-22", "2012-5-22", "2012-6-20"), new MonthPatternItem("en@calendar=chinese", DateFormat.LONG, "Fourth Month 2, 2012(ren-chen)", "Fourth Monthbis 2, 2012(ren-chen)", "Fifth Month 2, 2012(ren-chen)"), new MonthPatternItem("en@calendar=chinese", DateFormat.SHORT, "4/2/2012", "4bis/2/2012", "5/2/2012"), new MonthPatternItem("zh@calendar=chinese", DateFormat.LONG, "2012\u58EC\u8FB0\u5E74\u56DB\u6708\u521D\u4E8C", "2012\u58EC\u8FB0\u5E74\u95F0\u56DB\u6708\u521D\u4E8C", "2012\u58EC\u8FB0\u5E74\u4E94\u6708\u521D\u4E8C"), new MonthPatternItem("zh@calendar=chinese", DateFormat.SHORT, "2012/4/2", "2012/\u95F04/2", "2012/5/2"), new MonthPatternItem("zh@calendar=chinese", -3, "\u58EC\u8FB0-4-2", "\u58EC\u8FB0-\u95F04-2", "\u58EC\u8FB0-5-2"), new MonthPatternItem("zh@calendar=chinese", -4, "\u58EC\u8FB0 \u56DB\u6708 2", "\u58EC\u8FB0 \u95F0\u56DB\u6708 2", "\u58EC\u8FB0 \u4E94\u6708 2"), new MonthPatternItem("zh_Hant@calendar=chinese", DateFormat.LONG, "2012\u58EC\u8FB0\u5E74\u56DB\u6708\u521D\u4E8C", "2012\u58EC\u8FB0\u5E74\u958F\u56DB\u6708\u521D\u4E8C", "2012\u58EC\u8FB0\u5E74\u4E94\u6708\u521D\u4E8C"), new MonthPatternItem("zh_Hant@calendar=chinese", DateFormat.SHORT, "2012/4/2", "2012/\u958F4/2", "2012/5/2"), new MonthPatternItem("fr@calendar=chinese", DateFormat.LONG, "2 s\u00ECyu\u00E8 ren-chen", "2 s\u00ECyu\u00E8bis ren-chen", "2 w\u01D4yu\u00E8 ren-chen"), new MonthPatternItem("fr@calendar=chinese", DateFormat.SHORT, "2/4/29", "2/4bis/29", "2/5/29"), new MonthPatternItem("en@calendar=dangi", DateFormat.LONG, "Third Monthbis 2, 2012(ren-chen)", "Fourth Month 2, 2012(ren-chen)", "Fifth Month 1, 2012(ren-chen)"), new MonthPatternItem("en@calendar=dangi", DateFormat.SHORT, "3bis/2/2012", "4/2/2012", "5/1/2012"), new MonthPatternItem("en@calendar=dangi", -2, "78x29-3bis-2", "78x29-4-2", "78x29-5-1"), new MonthPatternItem("ko@calendar=dangi", DateFormat.LONG, "\uC784\uC9C4\uB144 \uC7243\uC6D4 2\uC77C", "\uC784\uC9C4\uB144 4\uC6D4 2\uC77C", "\uC784\uC9C4\uB144 5\uC6D4 1\uC77C"), new MonthPatternItem("ko@calendar=dangi", DateFormat.SHORT, "29. \uC7243. 2.", "29. 4. 2.", "29. 5. 1.") };
    // style: -1        -2            -3       -4
    // previously G and l for chinese cal only handled by ChineseDateFormat
    final String[] customPatterns = { "y-Ml-d", "G'x'y-Ml-d", "U-M-d", "U MMM d" };
    Calendar rootChineseCalendar = Calendar.getInstance(new ULocale("root@calendar=chinese"));
    for (MonthPatternItem item : items) {
        ULocale locale = new ULocale(item.locale);
        DateFormat dfmt = (item.style >= 0) ? DateFormat.getDateInstance(item.style, locale) : new SimpleDateFormat(customPatterns[-item.style - 1], locale);
        int idate = 0;
        for (ChineseCalTestDate date : dates) {
            rootChineseCalendar.clear();
            rootChineseCalendar.set(Calendar.ERA, date.era);
            rootChineseCalendar.set(date.year, date.month - 1, date.day);
            rootChineseCalendar.set(Calendar.IS_LEAP_MONTH, date.isLeapMonth);
            StringBuffer result = new StringBuffer();
            FieldPosition fpos = new FieldPosition(0);
            dfmt.format(rootChineseCalendar, result, fpos);
            if (result.toString().compareTo(item.dateString[idate]) != 0) {
                errln("FAIL: Chinese calendar format for locale " + item.locale + ", style " + item.style + ", expected \"" + item.dateString[idate] + "\", got \"" + result + "\"");
            } else {
                // formatted OK, try parse
                ParsePosition ppos = new ParsePosition(0);
                // ensure we are really parsing the fields we should be
                rootChineseCalendar.set(Calendar.YEAR, 1);
                rootChineseCalendar.set(Calendar.MONTH, 0);
                rootChineseCalendar.set(Calendar.IS_LEAP_MONTH, 0);
                rootChineseCalendar.set(Calendar.DATE, 1);
                // 
                dfmt.parse(result.toString(), rootChineseCalendar, ppos);
                int era = rootChineseCalendar.get(Calendar.ERA);
                int year = rootChineseCalendar.get(Calendar.YEAR);
                int month = rootChineseCalendar.get(Calendar.MONTH) + 1;
                int isLeapMonth = rootChineseCalendar.get(Calendar.IS_LEAP_MONTH);
                int day = rootChineseCalendar.get(Calendar.DATE);
                if (ppos.getIndex() < result.length() || year != date.year || month != date.month || isLeapMonth != date.isLeapMonth || day != date.day) {
                    errln("FAIL: Chinese calendar parse for locale " + item.locale + ", style " + item.style + ", string \"" + result + "\", expected " + date.year + "-" + date.month + "(" + date.isLeapMonth + ")-" + date.day + ", got pos " + ppos.getIndex() + " era(" + era + ")-" + year + "-" + month + "(" + isLeapMonth + ")-" + day);
                }
            }
            idate++;
        }
    }
}
Also used : ULocale(android.icu.util.ULocale) BuddhistCalendar(android.icu.util.BuddhistCalendar) HebrewCalendar(android.icu.util.HebrewCalendar) IslamicCalendar(android.icu.util.IslamicCalendar) ChineseCalendar(android.icu.util.ChineseCalendar) GregorianCalendar(android.icu.util.GregorianCalendar) Calendar(android.icu.util.Calendar) JapaneseCalendar(android.icu.util.JapaneseCalendar) FieldPosition(java.text.FieldPosition) DateFormat(android.icu.text.DateFormat) ChineseDateFormat(android.icu.text.ChineseDateFormat) SimpleDateFormat(android.icu.text.SimpleDateFormat) SimpleDateFormat(android.icu.text.SimpleDateFormat) ParsePosition(java.text.ParsePosition) Test(org.junit.Test)

Example 5 with ChineseDateFormat

use of android.icu.text.ChineseDateFormat in project j2objc by google.

the class ChineseTest method TestCoverage.

// public void TestFindLeapMonths() {
// ChineseCalendar cal = new ChineseCalendar();
// cal.setTime(new Date(2000-1900, Calendar.JANUARY, 1));
// long end = new Date(2100-1900, Calendar.JANUARY, 1).getTime();
// ChineseDateFormat fmt = (ChineseDateFormat) DateFormat.getInstance(cal);
// fmt.applyPattern("u-MMl-dd, 'Year' y, 'Cycle' G");
// while (cal.getTimeInMillis() < end) {
// if (cal.get(ChineseCalendar.IS_LEAP_MONTH) != 0) {
// cal.set(Calendar.DAY_OF_MONTH, 1);
// logln(cal.getTime() + " = " + fmt.format(cal.getTime()));
// cal.set(Calendar.DAY_OF_MONTH, 29);
// }
// cal.add(Calendar.DAY_OF_YEAR, 25);
// }
// }
@Test
public void TestCoverage() {
    // Coverage for constructors
    {
        // new ChineseCalendar(Date)
        ChineseCalendar cal = new ChineseCalendar(new Date());
        if (cal == null) {
            errln("could not create ChineseCalendar with Date");
        }
    }
    {
        // new ChineseCalendar(int year, int month, int isLeapMonth, int date)
        ChineseCalendar cal = new ChineseCalendar(23, Calendar.JULY, 1, 2);
        if (cal == null) {
            errln("could not create ChineseCalendar with year,month,isLeapMonth,date");
        }
        // Make sure the given values are properly set
        if (cal.get(Calendar.YEAR) != 23 || cal.get(Calendar.MONTH) != Calendar.JULY || cal.get(Calendar.IS_LEAP_MONTH) != 1 || cal.get(Calendar.DATE) != 2 || cal.get(Calendar.MILLISECONDS_IN_DAY) != 0) {
            errln("ChineseCalendar was initialized incorrectly with year,month,isLeapMonth,date");
        }
    }
    {
        // new ChineseCalendar(int year, int month, int isLeapMonth, int date, int hour, int minute, int second)
        ChineseCalendar cal = new ChineseCalendar(23, Calendar.JULY, 1, 2, 12, 34, 56);
        if (cal == null) {
            errln("could not create ChineseCalendar with year,month,isLeapMonth,date,hour,minute,second");
        }
        // Make sure the given values are properly set
        if (cal.get(Calendar.YEAR) != 23 || cal.get(Calendar.MONTH) != Calendar.JULY || cal.get(Calendar.IS_LEAP_MONTH) != 1 || cal.get(Calendar.DATE) != 2 || cal.get(Calendar.HOUR_OF_DAY) != 12 || cal.get(Calendar.MINUTE) != 34 || cal.get(Calendar.SECOND) != 56 || cal.get(Calendar.MILLISECOND) != 0) {
            errln("ChineseCalendar was initialized incorrectly with year,month,isLeapMonth,date,hour,minute,second");
        }
    }
    {
        // new ChineseCalendar(Locale)
        ChineseCalendar cal = new ChineseCalendar(Locale.getDefault());
        if (cal == null) {
            errln("could not create ChineseCalendar with Locale");
        }
    }
    {
        // new ChineseCalendar(ULocale)
        ChineseCalendar cal = new ChineseCalendar(ULocale.getDefault());
        if (cal == null) {
            errln("could not create ChineseCalendar with ULocale");
        }
    }
    {
        // new ChineseCalendar(TimeZone)
        ChineseCalendar cal = new ChineseCalendar(TimeZone.getDefault());
        if (cal == null) {
            errln("could not create ChineseCalendar with TimeZone");
        }
    }
    {
        // new ChineseCalendar(TimeZone, Locale)
        ChineseCalendar cal = new ChineseCalendar(TimeZone.getDefault(), Locale.getDefault());
        if (cal == null) {
            errln("could not create ChineseCalendar with TimeZone,Locale");
        }
    }
    {
        // new ChineseCalendar(TimeZone, ULocale)
        ChineseCalendar cal = new ChineseCalendar(TimeZone.getDefault(), ULocale.getDefault());
        if (cal == null) {
            errln("could not create ChineseCalendar with TimeZone,ULocale");
        }
    }
    // Note: ICU 50 or later versions, DateFormat.getInstance(ChineseCalendar) no longer
    // returns an instance of ChineseDateFormat. Chinese calendar formatting support was
    // changed and integrated into SimpleDateFormat since ICU 49. Also, ChineseDateFormat
    // specific pattern letter "l" is no longer used by the new implementation.
    // ChineseCalendar cal = new ChineseCalendar();
    // DateFormat format = DateFormat.getInstance(cal);
    // if(!(format instanceof ChineseDateFormat)){
    // errln("DateFormat.getInstance("+cal+") did not return a ChineseDateFormat");
    // }
    // ChineseDateFormat fmt = (ChineseDateFormat)format;
    // fmt.applyPattern("llyyll");
    // Date time = getDate(2100, Calendar.JANUARY, 1);
    // String str = fmt.format(time);
    // try {
    // Date e = fmt.parse(str);
    // logln("chinese calendar time: " + time + " result: " + str + " --> " + e);
    // } catch (java.text.ParseException ex) {
    // logln(ex.getMessage()); // chinese calendar can't parse this, no error for now
    // }
    // new ChineseCalendar(TimeZone,ULocale)
    ChineseCalendar ccal2 = new ChineseCalendar(TimeZone.getDefault(), ULocale.CHINA);
    if (ccal2 == null) {
        errln("could not create ChineseCalendar with TimeZone ULocale");
    } else {
        DateFormat fmt2 = DateFormat.getDateInstance(ccal2, DateFormat.DEFAULT, ULocale.CHINA);
        Date time2 = getDate(2001, Calendar.MAY, 23);
        String str2 = fmt2.format(time2);
        logln("Chinese calendar time: " + time2 + " result: " + str2);
    }
}
Also used : ChineseCalendar(android.icu.util.ChineseCalendar) ChineseDateFormat(android.icu.text.ChineseDateFormat) SimpleDateFormat(android.icu.text.SimpleDateFormat) DateFormat(android.icu.text.DateFormat) Date(java.util.Date) Test(org.junit.Test)

Aggregations

ChineseDateFormat (android.icu.text.ChineseDateFormat)5 SimpleDateFormat (android.icu.text.SimpleDateFormat)5 ChineseCalendar (android.icu.util.ChineseCalendar)5 Test (org.junit.Test)5 DateFormat (android.icu.text.DateFormat)4 Calendar (android.icu.util.Calendar)4 GregorianCalendar (android.icu.util.GregorianCalendar)4 BuddhistCalendar (android.icu.util.BuddhistCalendar)3 HebrewCalendar (android.icu.util.HebrewCalendar)3 IslamicCalendar (android.icu.util.IslamicCalendar)3 JapaneseCalendar (android.icu.util.JapaneseCalendar)3 Date (java.util.Date)3 ULocale (android.icu.util.ULocale)2 FieldPosition (java.text.FieldPosition)2 ParsePosition (java.text.ParsePosition)2 ICUResourceBundle (android.icu.impl.ICUResourceBundle)1 Field (android.icu.text.ChineseDateFormat.Field)1 ChineseDateFormatSymbols (android.icu.text.ChineseDateFormatSymbols)1 DateFormatSymbols (android.icu.text.DateFormatSymbols)1 NumberFormat (android.icu.text.NumberFormat)1