]> git.saurik.com Git - apple/icu.git/blame - icuSources/samples/dtptngsample/dtptngsample.cpp
ICU-59117.0.1.tar.gz
[apple/icu.git] / icuSources / samples / dtptngsample / dtptngsample.cpp
CommitLineData
f3c0d7a5
A
1// © 2016 and later: Unicode, Inc. and others.
2// License & terms of use: http://www.unicode.org/copyright.html
3/********************************************************************
57a6839d
A
4 * COPYRIGHT:
5 * Copyright (c) 2008-2014, International Business Machines Corporation and
6 * others. All Rights Reserved.
7 ********************************************************************/
8//! [getBestPatternExample1]
9#include <iostream>
10#include "unicode/smpdtfmt.h"
11#include "unicode/dtptngen.h"
12#include "unicode/ustdio.h"
13//! [getBestPatternExample1]
14
15using namespace std;
16
17static void getBestPatternExample() {
18
19 u_printf("========================================================================\n");
20 u_printf(" getBestPatternExample()\n");
21 u_printf("\n");
22 u_printf(" Use DateTimePatternGenerator to create customized date/time pattern:\n");
23 u_printf(" yQQQQ,yMMMM, MMMMd, hhmm, jjmm per locale\n");
24 u_printf("========================================================================\n");
25 //! [getBestPatternExample]
26 UnicodeString skeletons [] = {
27 UnicodeString("yQQQQ"), // year + full name of quarter, i.e., 4th quarter 1999
28 UnicodeString("yMMMM"), // year + full name of month, i.e., October 1999
29 UnicodeString("MMMMd"), // full name of month + day of the month, i.e., October 25
30 UnicodeString("hhmm"), // 12-hour-cycle format, i.e., 1:32 PM
31 UnicodeString("jjmm"), // preferred hour format for the given locale, i.e., 24-hour-cycle format for fr_FR
32 0,
33 };
34
35 Locale locales[] = {
36 Locale ("en_US"),
37 Locale ("fr_FR"),
38 Locale ("zh_CN"),
39 };
40
41 const char* filename = "sample.txt";
42 /* open a UTF-8 file for writing */
43 UFILE* f = u_fopen(filename, "w", NULL,"UTF-8");
44 UnicodeString dateReturned;
45 UErrorCode status =U_ZERO_ERROR;
46 Calendar *cal = Calendar::createInstance(status);
47 cal->set (1999,9,13,23,58,59);
48 UDate date = cal->getTime(status);
49 u_fprintf(f, "%-20S%-20S%-20S%-20S\n", UnicodeString("Skeleton").getTerminatedBuffer(),UnicodeString("en_US").getTerminatedBuffer(),UnicodeString("fr_FR").getTerminatedBuffer(),UnicodeString("zh_CN").getTerminatedBuffer());
50 for (int i=0;skeletons[i]!=NULL;i++) {
51 u_fprintf(f, "%-20S",skeletons[i].getTerminatedBuffer());
52 for (int j=0;j<sizeof(locales)/sizeof(locales[0]);j++) {
53 // create a DateTimePatternGenerator instance for given locale
54 DateTimePatternGenerator *dtfg= DateTimePatternGenerator::createInstance(locales[j],status);
55 // use getBestPattern method to get the best pattern for the given skeleton
56 UnicodeString pattern = dtfg->getBestPattern(skeletons[i],status);
57 // Constructs a SimpleDateFormat with the best pattern generated above and the given locale
58 SimpleDateFormat *sdf = new SimpleDateFormat(pattern,locales[j],status);
59 dateReturned.remove();
60 // Get the format of the given date
61 sdf->format(date,dateReturned,status);
62 /* write Unicode string to file */
63 u_fprintf(f, "%-20S", dateReturned.getTerminatedBuffer());
64 delete dtfg;
65 delete sdf;
66 }
67 u_fprintf(f,"\n");
68 }
69 /* close the file resource */
70 u_fclose(f);
71 delete cal;
72 //! [getBestPatternExample]
73}
74
75static void addPatternExample() {
76
77 u_printf("========================================================================\n");
78 u_printf(" addPatternExample()\n");
79 u_printf("\n");
80 u_printf(" Use addPattern API to add new '. von' to existing pattern\n");
81 u_printf("========================================================================\n");
82 //! [addPatternExample]
83 UErrorCode status =U_ZERO_ERROR;
84 UnicodeString conflictingPattern,dateReturned, pattern;
85 Locale locale=Locale::getFrance();
86 Calendar *cal = Calendar::createInstance(status);
87 cal->set (1999,9,13,23,58,59);
88 UDate date = cal->getTime(status);
89 // Create an DateTimePatternGenerator instance for the given locale
90 DateTimePatternGenerator *dtfg= DateTimePatternGenerator::createInstance(locale,status);
91 SimpleDateFormat *sdf = new SimpleDateFormat(dtfg->getBestPattern("MMMMddHmm",status),locale,status);
92 // Add '. von' to the existing pattern
93 dtfg->addPattern("dd'. von' MMMM", true, conflictingPattern,status);
94 // Apply the new pattern
95 sdf->applyPattern(dtfg->getBestPattern("MMMMddHmm",status));
96 dateReturned = sdf->format(date, dateReturned, status);
97 pattern =sdf->toPattern(pattern);
98 u_printf("%s\n", "New Pattern for FRENCH: ");
99 u_printf("%S\n", pattern.getTerminatedBuffer());
100 u_printf("%s\n", "Date Time in new Pattern: ");
101 u_printf("%S\n", dateReturned.getTerminatedBuffer());
102 delete dtfg;
103 delete sdf;
104 delete cal;
105
106 //! [addPatternExample]
107 /* output of the sample code:
108 ************************************************************************************************
109 New Pattern for FRENCH: dd. 'von' MMMM HH:mm
110 Date Time in new Pattern: 13. von octobre 23:58
111
112 *************************************************************************************************/
113 }
114
115static void replaceFieldTypesExample() {
116 // Use repalceFieldTypes API to replace zone 'zzzz' with 'vvvv'
117 u_printf("========================================================================\n");
118 u_printf(" replaceFieldTypeExample()\n");
119 u_printf("\n");
120 u_printf(" Use replaceFieldTypes API to replace zone 'zzzz' with 'vvvv'\n");
121 u_printf("========================================================================\n");
122 //! [replaceFieldTypesExample]
123 UFILE *out = u_finit(stdout, NULL, "UTF-8");
124 UErrorCode status =U_ZERO_ERROR;
125 UnicodeString pattern,dateReturned;
126 Locale locale =Locale::getFrance();
127 Calendar *cal = Calendar::createInstance(status);
128 cal->set (1999,9,13,23,58,59);
129 UDate date = cal->getTime(status);
130 TimeZone *zone = TimeZone::createTimeZone(UnicodeString("Europe/Paris"));
131 DateTimePatternGenerator *dtfg = DateTimePatternGenerator::createInstance(locale,status);
132 SimpleDateFormat *sdf = new SimpleDateFormat("EEEE d MMMM y HH:mm:ss zzzz",locale,status);
133 sdf->setTimeZone(*zone);
134 pattern = sdf->toPattern(pattern);
135 u_fprintf(out, "%S\n", UnicodeString("Pattern before replacement:").getTerminatedBuffer());
136 u_fprintf(out, "%S\n", pattern.getTerminatedBuffer());
137 dateReturned.remove();
138 dateReturned = sdf->format(date, dateReturned, status);
139 u_fprintf(out, "%S\n", UnicodeString("Date/Time format in fr_FR:").getTerminatedBuffer());
140 u_fprintf(out, "%S\n", dateReturned.getTerminatedBuffer());
141 // Replace zone "zzzz" in the pattern with "vvvv"
142 UnicodeString newPattern = dtfg->replaceFieldTypes(pattern, "vvvv", status);
143 // Apply the new pattern
144 sdf->applyPattern(newPattern);
145 dateReturned.remove();
146 dateReturned = sdf->format(date, dateReturned, status);
147 u_fprintf(out, "%S\n", UnicodeString("Pattern after replacement:").getTerminatedBuffer());
148 u_fprintf(out, "%S\n", newPattern.getTerminatedBuffer());
149 u_fprintf(out, "%S\n", UnicodeString("Date/Time format in fr_FR:").getTerminatedBuffer());
150 u_fprintf(out, "%S\n", dateReturned.getTerminatedBuffer());
151 delete sdf;
152 delete dtfg;
153 delete zone;
154 delete cal;
155 u_fclose(out);
156 //! [replaceFieldTypesExample]
157 }
158
159int main (int argc, char* argv[])
160{
161 getBestPatternExample();
162 addPatternExample();
163 replaceFieldTypesExample();
164 return 0;
165}