1fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/******************************************************************************
2fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius* Copyright (C) 2008-2014, International Business Machines Corporation and
359d709d503bab6e2b61931737e662dd293b40578ccornelius* others. All Rights Reserved.
459d709d503bab6e2b61931737e662dd293b40578ccornelius*******************************************************************************
559d709d503bab6e2b61931737e662dd293b40578ccornelius*/
659d709d503bab6e2b61931737e662dd293b40578ccornelius//! [dtitvfmtPreDefined1]
759d709d503bab6e2b61931737e662dd293b40578ccornelius#include <iostream>
859d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/dtitvfmt.h"
959d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/ustdio.h"
1059d709d503bab6e2b61931737e662dd293b40578ccornelius//! [dtitvfmtPreDefined1]
1159d709d503bab6e2b61931737e662dd293b40578ccornelius
1259d709d503bab6e2b61931737e662dd293b40578ccorneliususing namespace std;
1359d709d503bab6e2b61931737e662dd293b40578ccornelius
1459d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void dtitvfmtPreDefined() {
1559d709d503bab6e2b61931737e662dd293b40578ccornelius
1659d709d503bab6e2b61931737e662dd293b40578ccornelius	u_printf("===============================================================================\n");
1759d709d503bab6e2b61931737e662dd293b40578ccornelius	u_printf(" dtitvfmtPreDefined()\n");
1859d709d503bab6e2b61931737e662dd293b40578ccornelius    u_printf("\n");
1959d709d503bab6e2b61931737e662dd293b40578ccornelius    u_printf(" Use DateIntervalFormat to get date interval format for pre-defined skeletons:\n");
2059d709d503bab6e2b61931737e662dd293b40578ccornelius    u_printf(" yMMMd, MMMMd, jm per locale\n");
2159d709d503bab6e2b61931737e662dd293b40578ccornelius    u_printf("===============================================================================\n");
2259d709d503bab6e2b61931737e662dd293b40578ccornelius
2359d709d503bab6e2b61931737e662dd293b40578ccornelius	//! [dtitvfmtPreDefined]
2459d709d503bab6e2b61931737e662dd293b40578ccornelius	UFILE *out = u_finit(stdout, NULL, "UTF-8");
2559d709d503bab6e2b61931737e662dd293b40578ccornelius	UErrorCode status =U_ZERO_ERROR;
2659d709d503bab6e2b61931737e662dd293b40578ccornelius	// create 3 Date Intervals
2759d709d503bab6e2b61931737e662dd293b40578ccornelius	UnicodeString data[] = {
2859d709d503bab6e2b61931737e662dd293b40578ccornelius		UnicodeString("2007-10-10 10:10:10"),
2959d709d503bab6e2b61931737e662dd293b40578ccornelius		UnicodeString("2008-10-10 10:10:10"),
3059d709d503bab6e2b61931737e662dd293b40578ccornelius		UnicodeString("2008-11-10 10:10:10"),
3159d709d503bab6e2b61931737e662dd293b40578ccornelius		UnicodeString("2008-11-10 15:10:10")
3259d709d503bab6e2b61931737e662dd293b40578ccornelius		};
3359d709d503bab6e2b61931737e662dd293b40578ccornelius	Calendar *cal = Calendar::createInstance(status);
3459d709d503bab6e2b61931737e662dd293b40578ccornelius	cal->set(2007,10,10,10,10,10);
3559d709d503bab6e2b61931737e662dd293b40578ccornelius	UDate date1 = cal->getTime(status);
3659d709d503bab6e2b61931737e662dd293b40578ccornelius	cal->set(2008,10,10,10,10,10);
3759d709d503bab6e2b61931737e662dd293b40578ccornelius	UDate date2 = cal->getTime(status);
3859d709d503bab6e2b61931737e662dd293b40578ccornelius	cal->set(2008,11,10,10,10,10);
3959d709d503bab6e2b61931737e662dd293b40578ccornelius	UDate date3 = cal->getTime(status);
4059d709d503bab6e2b61931737e662dd293b40578ccornelius	cal->set(2008,11,10,15,10,10);
4159d709d503bab6e2b61931737e662dd293b40578ccornelius	UDate date4 = cal->getTime(status);
4259d709d503bab6e2b61931737e662dd293b40578ccornelius    DateInterval* dtitvsample[] = {
4359d709d503bab6e2b61931737e662dd293b40578ccornelius			new DateInterval(date1,date2),
4459d709d503bab6e2b61931737e662dd293b40578ccornelius            new DateInterval(date2,date3),
4559d709d503bab6e2b61931737e662dd293b40578ccornelius			new DateInterval(date3,date4),
4659d709d503bab6e2b61931737e662dd293b40578ccornelius        };
4759d709d503bab6e2b61931737e662dd293b40578ccornelius 	UnicodeString skeletons[] = {
4859d709d503bab6e2b61931737e662dd293b40578ccornelius            UnicodeString("yMMMd"),
4959d709d503bab6e2b61931737e662dd293b40578ccornelius            UnicodeString("MMMMd"),
5059d709d503bab6e2b61931737e662dd293b40578ccornelius            UnicodeString("jm"),
5159d709d503bab6e2b61931737e662dd293b40578ccornelius			0,
5259d709d503bab6e2b61931737e662dd293b40578ccornelius		};
5359d709d503bab6e2b61931737e662dd293b40578ccornelius    u_fprintf(out,"%-10s%-22s%-22s%-35s%-35s\n", "Skeleton","from","to","Date Interval in en_US","Date Interval in Ja");
5459d709d503bab6e2b61931737e662dd293b40578ccornelius	int i=0;
5559d709d503bab6e2b61931737e662dd293b40578ccornelius	UnicodeString formatEn,formatJa;
5659d709d503bab6e2b61931737e662dd293b40578ccornelius	FieldPosition pos=0;
5759d709d503bab6e2b61931737e662dd293b40578ccornelius    for (int j=0;skeletons[j]!=NULL ;j++) {
5859d709d503bab6e2b61931737e662dd293b40578ccornelius 		 u_fprintf(out,"%-10S%-22S%-22S",skeletons[j].getTerminatedBuffer(),data[i].getTerminatedBuffer(),data[i+1].getTerminatedBuffer());
5959d709d503bab6e2b61931737e662dd293b40578ccornelius         //create a DateIntervalFormat instance for given skeleton, locale
6059d709d503bab6e2b61931737e662dd293b40578ccornelius		 DateIntervalFormat* dtitvfmtEn = DateIntervalFormat::createInstance(skeletons[j], Locale::getEnglish(),status);
6159d709d503bab6e2b61931737e662dd293b40578ccornelius         DateIntervalFormat* dtitvfmtJa = DateIntervalFormat::createInstance(skeletons[j], Locale::getJapanese(),status);
6259d709d503bab6e2b61931737e662dd293b40578ccornelius		 formatEn.remove();
6359d709d503bab6e2b61931737e662dd293b40578ccornelius		 formatJa.remove();
6459d709d503bab6e2b61931737e662dd293b40578ccornelius		 //get the DateIntervalFormat
6559d709d503bab6e2b61931737e662dd293b40578ccornelius		 dtitvfmtEn->format(dtitvsample[i],formatEn,pos,status);
6659d709d503bab6e2b61931737e662dd293b40578ccornelius		 dtitvfmtJa->format(dtitvsample[i],formatJa,pos,status);
6759d709d503bab6e2b61931737e662dd293b40578ccornelius         u_fprintf(out,"%-35S%-35S\n", formatEn.getTerminatedBuffer(),formatJa.getTerminatedBuffer());
6859d709d503bab6e2b61931737e662dd293b40578ccornelius		 delete dtitvfmtEn;
6959d709d503bab6e2b61931737e662dd293b40578ccornelius		 delete dtitvfmtJa;
7059d709d503bab6e2b61931737e662dd293b40578ccornelius         i++;
7159d709d503bab6e2b61931737e662dd293b40578ccornelius        }
7259d709d503bab6e2b61931737e662dd293b40578ccornelius	u_fclose(out);
7359d709d503bab6e2b61931737e662dd293b40578ccornelius	//! [dtitvfmtPreDefined]
7459d709d503bab6e2b61931737e662dd293b40578ccornelius}
7559d709d503bab6e2b61931737e662dd293b40578ccornelius
7659d709d503bab6e2b61931737e662dd293b40578ccorneliusstatic void dtitvfmtCustomized() {
7759d709d503bab6e2b61931737e662dd293b40578ccornelius
7859d709d503bab6e2b61931737e662dd293b40578ccornelius	u_printf("===============================================================================\n");
7959d709d503bab6e2b61931737e662dd293b40578ccornelius	u_printf("\n");
8059d709d503bab6e2b61931737e662dd293b40578ccornelius	u_printf(" dtitvfmtCustomized()\n");
8159d709d503bab6e2b61931737e662dd293b40578ccornelius	u_printf("\n");
8259d709d503bab6e2b61931737e662dd293b40578ccornelius    u_printf(" Use DateIntervalFormat to create customized date interval format for yMMMd, Hm");
8359d709d503bab6e2b61931737e662dd293b40578ccornelius	u_printf("\n");
8459d709d503bab6e2b61931737e662dd293b40578ccornelius    u_printf("================================================================================\n");
8559d709d503bab6e2b61931737e662dd293b40578ccornelius	//! [dtitvfmtCustomized]
8659d709d503bab6e2b61931737e662dd293b40578ccornelius	UFILE *out = u_finit(stdout, NULL, "UTF-8");
8759d709d503bab6e2b61931737e662dd293b40578ccornelius	UErrorCode status =U_ZERO_ERROR;
8859d709d503bab6e2b61931737e662dd293b40578ccornelius	UnicodeString data[] = {
8959d709d503bab6e2b61931737e662dd293b40578ccornelius		UnicodeString("2007-9-10 10:10:10"),
9059d709d503bab6e2b61931737e662dd293b40578ccornelius		UnicodeString("2007-10-10 10:10:10"),
9159d709d503bab6e2b61931737e662dd293b40578ccornelius		UnicodeString("2007-10-10 22:10:10")
9259d709d503bab6e2b61931737e662dd293b40578ccornelius		};
9359d709d503bab6e2b61931737e662dd293b40578ccornelius	// to create 2 Date Intervals
9459d709d503bab6e2b61931737e662dd293b40578ccornelius    Calendar *cal1 = Calendar::createInstance(status);
9559d709d503bab6e2b61931737e662dd293b40578ccornelius	cal1->set(2007,9,10,10,10,10);
9659d709d503bab6e2b61931737e662dd293b40578ccornelius	Calendar *cal2 = Calendar::createInstance(status);
9759d709d503bab6e2b61931737e662dd293b40578ccornelius	cal2->set(2007,10,10,10,10,10);
9859d709d503bab6e2b61931737e662dd293b40578ccornelius	Calendar *cal3 = Calendar::createInstance(status);
9959d709d503bab6e2b61931737e662dd293b40578ccornelius	cal3->set(2007,10,10,22,10,10);
10059d709d503bab6e2b61931737e662dd293b40578ccornelius	DateInterval* dtitvsample[] = {
10159d709d503bab6e2b61931737e662dd293b40578ccornelius			new DateInterval(cal1->getTime(status),cal2->getTime(status)),
10259d709d503bab6e2b61931737e662dd293b40578ccornelius            new DateInterval(cal2->getTime(status),cal3->getTime(status))
10359d709d503bab6e2b61931737e662dd293b40578ccornelius	      };
10459d709d503bab6e2b61931737e662dd293b40578ccornelius	UnicodeString skeletons[] = {
10559d709d503bab6e2b61931737e662dd293b40578ccornelius            UnicodeString("yMMMd"),
10659d709d503bab6e2b61931737e662dd293b40578ccornelius            UnicodeString("Hm"),
10759d709d503bab6e2b61931737e662dd293b40578ccornelius			0,
10859d709d503bab6e2b61931737e662dd293b40578ccornelius        };
10959d709d503bab6e2b61931737e662dd293b40578ccornelius		u_printf("%-10s%-22s%-22s%-45s%-35s\n", "Skeleton", "from","to", "Date Interval in en_US","Date Interval in Ja");
11059d709d503bab6e2b61931737e662dd293b40578ccornelius		// Create an empty DateIntervalInfo object
11159d709d503bab6e2b61931737e662dd293b40578ccornelius        DateIntervalInfo dtitvinf =  DateIntervalInfo(status);
11259d709d503bab6e2b61931737e662dd293b40578ccornelius		// Set Date Time internal pattern for MONTH, HOUR_OF_DAY
11359d709d503bab6e2b61931737e662dd293b40578ccornelius        dtitvinf.setIntervalPattern("yMMMd", UCAL_MONTH, "y 'Diff' MMM d --- MMM d",status);
11459d709d503bab6e2b61931737e662dd293b40578ccornelius        dtitvinf.setIntervalPattern("Hm", UCAL_HOUR_OF_DAY, "yyyy MMM d HH:mm ~ HH:mm",status);
11559d709d503bab6e2b61931737e662dd293b40578ccornelius		// Set fallback interval pattern
11659d709d503bab6e2b61931737e662dd293b40578ccornelius        dtitvinf.setFallbackIntervalPattern("{0} ~~~ {1}",status);
11759d709d503bab6e2b61931737e662dd293b40578ccornelius		// Get the DateIntervalFormat with the custom pattern
11859d709d503bab6e2b61931737e662dd293b40578ccornelius        UnicodeString formatEn,formatJa;
11959d709d503bab6e2b61931737e662dd293b40578ccornelius		FieldPosition pos=0;
12059d709d503bab6e2b61931737e662dd293b40578ccornelius		for (int i=0;i<2;i++){
12159d709d503bab6e2b61931737e662dd293b40578ccornelius            for (int j=0;skeletons[j]!=NULL;j++) {
12259d709d503bab6e2b61931737e662dd293b40578ccornelius			u_fprintf(out,"%-10S%-22S%-22S", skeletons[i].getTerminatedBuffer(),data[j].getTerminatedBuffer(), data[j+1].getTerminatedBuffer());
12359d709d503bab6e2b61931737e662dd293b40578ccornelius            DateIntervalFormat* dtitvfmtEn = DateIntervalFormat::createInstance(skeletons[i],Locale::getEnglish(),dtitvinf,status);
12459d709d503bab6e2b61931737e662dd293b40578ccornelius            DateIntervalFormat* dtitvfmtJa = DateIntervalFormat::createInstance(skeletons[i],Locale::getJapanese(),dtitvinf,status);
12559d709d503bab6e2b61931737e662dd293b40578ccornelius			formatEn.remove();
12659d709d503bab6e2b61931737e662dd293b40578ccornelius			formatJa.remove();
12759d709d503bab6e2b61931737e662dd293b40578ccornelius			dtitvfmtEn->format(dtitvsample[j],formatEn,pos,status);
12859d709d503bab6e2b61931737e662dd293b40578ccornelius			dtitvfmtJa->format(dtitvsample[j],formatJa,pos,status);
12959d709d503bab6e2b61931737e662dd293b40578ccornelius			u_fprintf(out,"%-45S%-35S\n", formatEn.getTerminatedBuffer(),formatJa.getTerminatedBuffer());
13059d709d503bab6e2b61931737e662dd293b40578ccornelius            }
13159d709d503bab6e2b61931737e662dd293b40578ccornelius       }
13259d709d503bab6e2b61931737e662dd293b40578ccornelius	u_fclose(out);
13359d709d503bab6e2b61931737e662dd293b40578ccornelius	//! [dtitvfmtCustomized]
13459d709d503bab6e2b61931737e662dd293b40578ccornelius}
13559d709d503bab6e2b61931737e662dd293b40578ccornelius
13659d709d503bab6e2b61931737e662dd293b40578ccorneliusint main (int argc, char* argv[])
13759d709d503bab6e2b61931737e662dd293b40578ccornelius{
13859d709d503bab6e2b61931737e662dd293b40578ccornelius	dtitvfmtPreDefined();
13959d709d503bab6e2b61931737e662dd293b40578ccornelius	dtitvfmtCustomized();
14059d709d503bab6e2b61931737e662dd293b40578ccornelius	return 0;
141fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius}
142