Home | History | Annotate | Download | only in dtptngsample
      1 // Copyright (C) 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