Home | History | Annotate | Download | only in dtptngsample
      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