| // © 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; |
| } |