summaryrefslogtreecommitdiff
path: root/icu4j/samples/src/com/ibm/icu/samples/text/datetimepatterngenerator/DateTimePatternGeneratorSample.java
blob: 4066263da0b356c99880bc92f163dc4b37f632c6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
// © 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
/*
 *******************************************************************************
 * Copyright (C) 2013, International Business Machines Corporation and         *
 * others. All Rights Reserved.                                                *
 *******************************************************************************
 */
package com.ibm.icu.samples.text.datetimepatterngenerator;
// ---getBestPatternExample
import java.util.Date;

import com.ibm.icu.text.DateFormat;
import com.ibm.icu.text.DateTimePatternGenerator;
import com.ibm.icu.text.SimpleDateFormat;
import com.ibm.icu.util.GregorianCalendar;
import com.ibm.icu.util.TimeZone;
import com.ibm.icu.util.ULocale;
// ---getBestPatternExample
/**
 * com.ibm.icu.text.DateTimePatternGenerator Sample Code
 */
public class DateTimePatternGeneratorSample {
    
    public static void main (String[] args) {
        getBestPatternExample();
        addPatternExample();
        replaceFieldTypesExample();
    }
    
    public static void   getBestPatternExample() {
        System.out.println("========================================================================");
        System.out.println(" getBestPatternExample()");
        System.out.println();
        System.out.println(" Use DateTimePatternGenerator to create customized date/time pattern:");
        System.out.println(" yQQQQ,yMMMM, MMMMd, hhmm, jjmm per locale");
        System.out.println("========================================================================");
     // ---getBestPatternExample
        final String[] skeletons = {
                "yQQQQ", // year + full name of quarter, i.e., 4th quarter 1999
                "yMMMM", // year + full name of month, i.e., October 1999
                "MMMMd", // full name of month + day of the month, i.e., October 25
                "hhmm",  // 12-hour-cycle format, i.e., 1:32 PM
                "jjmm"   // preferred hour format for the given locale, i.e., 24-hour-cycle format for fr_FR
                };
        final ULocale[] locales = {
                new ULocale ("en_US"),
                new ULocale ("fr_FR"),
                new ULocale ("zh_CN"),
                };
        DateTimePatternGenerator dtfg = null;
        Date date= new GregorianCalendar(1999,9,13,23,58,59).getTime();
        System.out.printf("%-20s%-35s%-35s%-35s\n\n", "Skeleton", "en_US", "fr_FR","zh_CN");
        for (String skeleton:skeletons) {
             System.out.printf("%-20s", skeleton);
            for (ULocale locale:locales) {
                // create a DateTimePatternGenerator instance for given locale
                dtfg = DateTimePatternGenerator.getInstance(locale);
                // use getBestPattern method to get the best pattern for the given skeleton
                String pattern = dtfg.getBestPattern(skeleton);
                // Constructs a SimpleDateFormat with the best pattern generated above and the given locale
                SimpleDateFormat sdf = new SimpleDateFormat(pattern, locale);
                // Get the format of the given date
                System.out.printf("%-35s",sdf.format(date));
            }
            System.out.println("\n");
        }
        /** output of the sample code:
         *************************************************************************************************************
           Skeleton            en_US                              fr_FR                              zh_CN

           yQQQQ               4th quarter 1999                   4e trimestre 1999                  1999年第四季度

           yMMMM               October 1999                       octobre 1999                       1999年10月 

           MMMMd               October 13                         13 octobre                         10月13日 
           
           hhmm                11:58 PM                           11:58 PM                           下午11:58

           jjmm                11:58 PM                           23:58                              下午11:58

        **************************************************************************************************************/
        // Use DateTime.getPatternInstance to produce the same Date/Time format with predefined constant field value
        final String[] dtfskeleton = {
                DateFormat.YEAR_QUARTER, // year + full name of quarter, i.e., 4th quarter 1999
                DateFormat.YEAR_MONTH,   // year + full name of month, i.e., October 1999
                DateFormat.MONTH_DAY     // full name of month + day of the month, i.e., October 25
                };
        System.out.printf("%-20s%-35s%-35s%-35s\n\n", "Skeleton", "en_US", "fr_FR","zh_CN");
        for (String skeleton:dtfskeleton) {
            System.out.printf("%-20s", skeleton);
            for (ULocale locale:locales) {
                // Use DateFormat.getPatternInstance to get the date/time format for the locale,
                // and apply the format to the given date
                String df=DateFormat.getPatternInstance(skeleton,locale).format(date);
                System.out.printf("%-35s",df);
            }
            System.out.println("\n");
        }

        /** output of the sample code:
         ************************************************************************************************************
         Skeleton            en_US                              fr_FR                              zh_CN

         yQQQQ               4th quarter 1999                   4e trimestre 1999                  1999年第四季度

         yMMMM               October 1999                       octobre 1999                       1999年10月

         MMMMd               October 13                         13 octobre                         10月13日 
         ************************************************************************************************************/
// ---getBestPatternExample
}

    public static void addPatternExample() {
        System.out.println("========================================================================");
        System.out.println(" addPatternExample()");
        System.out.println();
        System.out.println(" Use addPattern API to add new '. von' to existing pattern");
        System.out.println("========================================================================");
    // ---addPatternExample
        Date date= new GregorianCalendar(1999,9,13,23,58,59).getTime();
        ULocale locale = ULocale.FRANCE;
        // Create an DateTimePatternGenerator instance for the given locale
        DateTimePatternGenerator gen = DateTimePatternGenerator.getInstance(locale);
        SimpleDateFormat format = new SimpleDateFormat(gen.getBestPattern("MMMMddHmm"), locale);
        DateTimePatternGenerator.PatternInfo returnInfo = new DateTimePatternGenerator.PatternInfo();
        // Add '. von' to the existing pattern
        gen.addPattern("dd'. von' MMMM", true, returnInfo);
        // Apply the new pattern
        format.applyPattern(gen.getBestPattern("MMMMddHmm"));
        System.out.println("New Pattern for FRENCH: "+format.toPattern());
        System.out.println("Date Time in new Pattern: "+format.format(date));
      
        /** output of the sample code:
        **************************************************************************************************
         New Pattern for FRENCH: dd. 'von' MMMM HH:mm
         Date Time in new Pattern: 13. von octobre 23:58
     
        *************************************************************************************************/
    // ---addPatternExample
}

    public static void replaceFieldTypesExample() {
        // Use repalceFieldTypes API to replace zone 'zzzz' with 'vvvv'
        System.out.println("========================================================================");
        System.out.println(" replaceFieldTypeExample()");
        System.out.println();
        System.out.println(" Use replaceFieldTypes API to replace zone 'zzzz' with 'vvvv");
        System.out.println("========================================================================");
    // ---replaceFieldTypesExample
        Date date= new GregorianCalendar(1999,9,13,23,58,59).getTime();
        TimeZone zone = TimeZone.getTimeZone("Europe/Paris");
        ULocale locale = ULocale.FRANCE;
        DateTimePatternGenerator gen = DateTimePatternGenerator.getInstance(locale);
        SimpleDateFormat format = new SimpleDateFormat("EEEE d MMMM y HH:mm:ss zzzz",locale);
        format.setTimeZone(zone);
        String pattern = format.toPattern();
        System.out.println("Pattern before replacement:");
        System.out.println(pattern);
        System.out.println("Date/Time format in fr_FR:");
        System.out.println(format.format(date));
        // Replace zone "zzzz" in the pattern with "vvvv"
        String newPattern = gen.replaceFieldTypes(pattern, "vvvv");
        // Apply the new pattern
        format.applyPattern(newPattern);
        System.out.println("Pattern after replacement:");
        System.out.println(newPattern);
        System.out.println("Date/Time format in fr_FR:");
        System.out.println(format.format(date));

        /** output of the sample code:
        ***************************************************************************************************
         Pattern before replacement:
         EEEE d MMMM y HH:mm:ss zzzz
         Date/Time format in fr_FR:
         jeudi 14 octobre 1999 05:58:59 heure avancée d’Europe centrale
         Pattern after replacement:
         EEEE d MMMM y HH:mm:ss vvvv
         Date/Time format in fr_FR:
         jeudi 14 octobre 1999 05:58:59 heure de l’Europe centrale

        **************************************************************************************************/
 // ---replaceFieldTypesExample
    }
}