| // © 2016 and later: Unicode, Inc. and others. | |
| // License & terms of use: http://www.unicode.org/copyright.html | |
| /******************************************************************** | |
| * COPYRIGHT: | |
| * Copyright (c) 2008-2014, International Business Machines Corporation and | |
| * others. All Rights Reserved. | |
| ********************************************************************/ | |
| //! [getBestPatternExample1] | |
| #include <iostream> | |
| #include "unicode/smpdtfmt.h" | |
| #include "unicode/dtptngen.h" | |
| #include "unicode/ustdio.h" | |
| //! [getBestPatternExample1] | |
| using namespace std; | |
| using namespace icu; | |
| static void getBestPatternExample() { | |
| u_printf("========================================================================\n"); | |
| u_printf(" getBestPatternExample()\n"); | |
| u_printf("\n"); | |
| u_printf(" Use DateTimePatternGenerator to create customized date/time pattern:\n"); | |
| u_printf(" yQQQQ,yMMMM, MMMMd, hhmm, jjmm per locale\n"); | |
| u_printf("========================================================================\n"); | |
| //! [getBestPatternExample] | |
| UnicodeString skeletons [] = { | |
| UnicodeString("yQQQQ"), // year + full name of quarter, i.e., 4th quarter 1999 | |
| UnicodeString("yMMMM"), // year + full name of month, i.e., October 1999 | |
| UnicodeString("MMMMd"), // full name of month + day of the month, i.e., October 25 | |
| UnicodeString("hhmm"), // 12-hour-cycle format, i.e., 1:32 PM | |
| UnicodeString("jjmm"), // preferred hour format for the given locale, i.e., 24-hour-cycle format for fr_FR | |
| 0, | |
| }; | |
| Locale locales[] = { | |
| Locale ("en_US"), | |
| Locale ("fr_FR"), | |
| Locale ("zh_CN"), | |
| }; | |
| const char* filename = "sample.txt"; | |
| /* open a UTF-8 file for writing */ | |
| UFILE* f = u_fopen(filename, "w", NULL,"UTF-8"); | |
| UnicodeString dateReturned; | |
| UErrorCode status =U_ZERO_ERROR; | |
| Calendar *cal = Calendar::createInstance(status); | |
| cal->set (1999,9,13,23,58,59); | |
| UDate date = cal->getTime(status); | |
| u_fprintf(f, "%-20S%-20S%-20S%-20S\n", UnicodeString("Skeleton").getTerminatedBuffer(),UnicodeString("en_US").getTerminatedBuffer(),UnicodeString("fr_FR").getTerminatedBuffer(),UnicodeString("zh_CN").getTerminatedBuffer()); | |
| for (int i=0;skeletons[i]!=NULL;i++) { | |
| u_fprintf(f, "%-20S",skeletons[i].getTerminatedBuffer()); | |
| for (int j=0;j<sizeof(locales)/sizeof(locales[0]);j++) { | |
| // create a DateTimePatternGenerator instance for given locale | |
| DateTimePatternGenerator *dtfg= DateTimePatternGenerator::createInstance(locales[j],status); | |
| // use getBestPattern method to get the best pattern for the given skeleton | |
| UnicodeString pattern = dtfg->getBestPattern(skeletons[i],status); | |
| // Constructs a SimpleDateFormat with the best pattern generated above and the given locale | |
| SimpleDateFormat *sdf = new SimpleDateFormat(pattern,locales[j],status); | |
| dateReturned.remove(); | |
| // Get the format of the given date | |
| sdf->format(date,dateReturned,status); | |
| /* write Unicode string to file */ | |
| u_fprintf(f, "%-20S", dateReturned.getTerminatedBuffer()); | |
| delete dtfg; | |
| delete sdf; | |
| } | |
| u_fprintf(f,"\n"); | |
| } | |
| /* close the file resource */ | |
| u_fclose(f); | |
| delete cal; | |
| //! [getBestPatternExample] | |
| } | |
| static void addPatternExample() { | |
| u_printf("========================================================================\n"); | |
| u_printf(" addPatternExample()\n"); | |
| u_printf("\n"); | |
| u_printf(" Use addPattern API to add new '. von' to existing pattern\n"); | |
| u_printf("========================================================================\n"); | |
| //! [addPatternExample] | |
| UErrorCode status =U_ZERO_ERROR; | |
| UnicodeString conflictingPattern,dateReturned, pattern; | |
| Locale locale=Locale::getFrance(); | |
| Calendar *cal = Calendar::createInstance(status); | |
| cal->set (1999,9,13,23,58,59); | |
| UDate date = cal->getTime(status); | |
| // Create an DateTimePatternGenerator instance for the given locale | |
| DateTimePatternGenerator *dtfg= DateTimePatternGenerator::createInstance(locale,status); | |
| SimpleDateFormat *sdf = new SimpleDateFormat(dtfg->getBestPattern("MMMMddHmm",status),locale,status); | |
| // Add '. von' to the existing pattern | |
| dtfg->addPattern("dd'. von' MMMM", true, conflictingPattern,status); | |
| // Apply the new pattern | |
| sdf->applyPattern(dtfg->getBestPattern("MMMMddHmm",status)); | |
| dateReturned = sdf->format(date, dateReturned, status); | |
| pattern =sdf->toPattern(pattern); | |
| u_printf("%s\n", "New Pattern for FRENCH: "); | |
| u_printf("%S\n", pattern.getTerminatedBuffer()); | |
| u_printf("%s\n", "Date Time in new Pattern: "); | |
| u_printf("%S\n", dateReturned.getTerminatedBuffer()); | |
| delete dtfg; | |
| delete sdf; | |
| delete cal; | |
| //! [addPatternExample] | |
| /* output of the sample code: | |
| ************************************************************************************************ | |
| New Pattern for FRENCH: dd. 'von' MMMM HH:mm | |
| Date Time in new Pattern: 13. von octobre 23:58 | |
| *************************************************************************************************/ | |
| } | |
| static void replaceFieldTypesExample() { | |
| // Use repalceFieldTypes API to replace zone 'zzzz' with 'vvvv' | |
| u_printf("========================================================================\n"); | |
| u_printf(" replaceFieldTypeExample()\n"); | |
| u_printf("\n"); | |
| u_printf(" Use replaceFieldTypes API to replace zone 'zzzz' with 'vvvv'\n"); | |
| u_printf("========================================================================\n"); | |
| //! [replaceFieldTypesExample] | |
| UFILE *out = u_finit(stdout, NULL, "UTF-8"); | |
| UErrorCode status =U_ZERO_ERROR; | |
| UnicodeString pattern,dateReturned; | |
| Locale locale =Locale::getFrance(); | |
| Calendar *cal = Calendar::createInstance(status); | |
| cal->set (1999,9,13,23,58,59); | |
| UDate date = cal->getTime(status); | |
| TimeZone *zone = TimeZone::createTimeZone(UnicodeString("Europe/Paris")); | |
| DateTimePatternGenerator *dtfg = DateTimePatternGenerator::createInstance(locale,status); | |
| SimpleDateFormat *sdf = new SimpleDateFormat("EEEE d MMMM y HH:mm:ss zzzz",locale,status); | |
| sdf->setTimeZone(*zone); | |
| pattern = sdf->toPattern(pattern); | |
| u_fprintf(out, "%S\n", UnicodeString("Pattern before replacement:").getTerminatedBuffer()); | |
| u_fprintf(out, "%S\n", pattern.getTerminatedBuffer()); | |
| dateReturned.remove(); | |
| dateReturned = sdf->format(date, dateReturned, status); | |
| u_fprintf(out, "%S\n", UnicodeString("Date/Time format in fr_FR:").getTerminatedBuffer()); | |
| u_fprintf(out, "%S\n", dateReturned.getTerminatedBuffer()); | |
| // Replace zone "zzzz" in the pattern with "vvvv" | |
| UnicodeString newPattern = dtfg->replaceFieldTypes(pattern, "vvvv", status); | |
| // Apply the new pattern | |
| sdf->applyPattern(newPattern); | |
| dateReturned.remove(); | |
| dateReturned = sdf->format(date, dateReturned, status); | |
| u_fprintf(out, "%S\n", UnicodeString("Pattern after replacement:").getTerminatedBuffer()); | |
| u_fprintf(out, "%S\n", newPattern.getTerminatedBuffer()); | |
| u_fprintf(out, "%S\n", UnicodeString("Date/Time format in fr_FR:").getTerminatedBuffer()); | |
| u_fprintf(out, "%S\n", dateReturned.getTerminatedBuffer()); | |
| delete sdf; | |
| delete dtfg; | |
| delete zone; | |
| delete cal; | |
| u_fclose(out); | |
| //! [replaceFieldTypesExample] | |
| } | |
| int main (int argc, char* argv[]) | |
| { | |
| getBestPatternExample(); | |
| addPatternExample(); | |
| replaceFieldTypesExample(); | |
| return 0; | |
| } |