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