1 // 2016 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 3 /******************************************************************** 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 15 using namespace std; 16 17 static 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 75 static 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 115 static 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 159 int main (int argc, char* argv[]) 160 { 161 getBestPatternExample(); 162 addPatternExample(); 163 replaceFieldTypesExample(); 164 return 0; 165 } 166