1/********************************************************************************
2* Copyright (C) 2008-2013, International Business Machines Corporation and
3* others. All Rights Reserved.
4*******************************************************************************
5*/
6//! [dtitvfmtPreDefined1]
7#include <iostream>
8#include "unicode/dtitvfmt.h"
9#include "unicode/ustdio.h"
10//! [dtitvfmtPreDefined1]
11
12using namespace std;
13
14static void dtitvfmtPreDefined() {
15
16	u_printf("===============================================================================\n");
17	u_printf(" dtitvfmtPreDefined()\n");
18    u_printf("\n");
19    u_printf(" Use DateIntervalFormat to get date interval format for pre-defined skeletons:\n");
20    u_printf(" yMMMd, MMMMd, jm per locale\n");
21    u_printf("===============================================================================\n");
22
23	//! [dtitvfmtPreDefined]
24	UFILE *out = u_finit(stdout, NULL, "UTF-8");
25	UErrorCode status =U_ZERO_ERROR;
26	// create 3 Date Intervals
27	UnicodeString data[] = {
28		UnicodeString("2007-10-10 10:10:10"),
29		UnicodeString("2008-10-10 10:10:10"),
30		UnicodeString("2008-11-10 10:10:10"),
31		UnicodeString("2008-11-10 15:10:10")
32		};
33	Calendar *cal = Calendar::createInstance(status);
34	cal->set(2007,10,10,10,10,10);
35	UDate date1 = cal->getTime(status);
36	cal->set(2008,10,10,10,10,10);
37	UDate date2 = cal->getTime(status);
38	cal->set(2008,11,10,10,10,10);
39	UDate date3 = cal->getTime(status);
40	cal->set(2008,11,10,15,10,10);
41	UDate date4 = cal->getTime(status);
42    DateInterval* dtitvsample[] = {
43			new DateInterval(date1,date2),
44            new DateInterval(date2,date3),
45			new DateInterval(date3,date4),
46        };
47 	UnicodeString skeletons[] = {
48            UnicodeString("yMMMd"),
49            UnicodeString("MMMMd"),
50            UnicodeString("jm"),
51			0,
52		};
53    u_fprintf(out,"%-10s%-22s%-22s%-35s%-35s\n", "Skeleton","from","to","Date Interval in en_US","Date Interval in Ja");
54	int i=0;
55	UnicodeString formatEn,formatJa;
56	FieldPosition pos=0;
57    for (int j=0;skeletons[j]!=NULL ;j++) {
58 		 u_fprintf(out,"%-10S%-22S%-22S",skeletons[j].getTerminatedBuffer(),data[i].getTerminatedBuffer(),data[i+1].getTerminatedBuffer());
59         //create a DateIntervalFormat instance for given skeleton, locale
60		 DateIntervalFormat* dtitvfmtEn = DateIntervalFormat::createInstance(skeletons[j], Locale::getEnglish(),status);
61         DateIntervalFormat* dtitvfmtJa = DateIntervalFormat::createInstance(skeletons[j], Locale::getJapanese(),status);
62		 formatEn.remove();
63		 formatJa.remove();
64		 //get the DateIntervalFormat
65		 dtitvfmtEn->format(dtitvsample[i],formatEn,pos,status);
66		 dtitvfmtJa->format(dtitvsample[i],formatJa,pos,status);
67         u_fprintf(out,"%-35S%-35S\n", formatEn.getTerminatedBuffer(),formatJa.getTerminatedBuffer());
68		 delete dtitvfmtEn;
69		 delete dtitvfmtJa;
70         i++;
71        }
72	u_fclose(out);
73	//! [dtitvfmtPreDefined]
74/* output of the sample code:
75  *********************************************************************************************************************************************************
76   Skeleton		from								to								Date Interval in en_US				Date Interval in Ja
77   yMMMd			2007-10-10 10:10:10					2008-10-10 10:10:10				Nov 10, 2007 – Nov 10, 2008			2007年11月10日~2008年11月10日
78   MMMMd			2008-10-10 10:10:10					2008-11-10 10:10:10				November 10 – December 10			11月10日~12月10日
79   jm				2008-11-10 10:10:10					2008-11-10 15:10:10				10:10 AM – 3:10 PM					10:10~15:10
80
81  *********************************************************************************************************************************************************/
82}
83
84static void dtitvfmtCustomized() {
85
86	u_printf("===============================================================================\n");
87	u_printf("\n");
88	u_printf(" dtitvfmtCustomized()\n");
89	u_printf("\n");
90    u_printf(" Use DateIntervalFormat to create customized date interval format for yMMMd, Hm");
91	u_printf("\n");
92    u_printf("================================================================================\n");
93	//! [dtitvfmtCustomized]
94	UFILE *out = u_finit(stdout, NULL, "UTF-8");
95	UErrorCode status =U_ZERO_ERROR;
96	UnicodeString data[] = {
97		UnicodeString("2007-9-10 10:10:10"),
98		UnicodeString("2007-10-10 10:10:10"),
99		UnicodeString("2007-10-10 22:10:10")
100		};
101	// to create 2 Date Intervals
102    Calendar *cal1 = Calendar::createInstance(status);
103	cal1->set(2007,9,10,10,10,10);
104	Calendar *cal2 = Calendar::createInstance(status);
105	cal2->set(2007,10,10,10,10,10);
106	Calendar *cal3 = Calendar::createInstance(status);
107	cal3->set(2007,10,10,22,10,10);
108	DateInterval* dtitvsample[] = {
109			new DateInterval(cal1->getTime(status),cal2->getTime(status)),
110            new DateInterval(cal2->getTime(status),cal3->getTime(status))
111	      };
112	UnicodeString skeletons[] = {
113            UnicodeString("yMMMd"),
114            UnicodeString("Hm"),
115			0,
116        };
117		u_printf("%-10s%-22s%-22s%-45s%-35s\n", "Skeleton", "from","to", "Date Interval in en_US","Date Interval in Ja");
118		// Create an empty DateIntervalInfo object
119        DateIntervalInfo dtitvinf =  DateIntervalInfo(status);
120		// Set Date Time internal pattern for MONTH, HOUR_OF_DAY
121        dtitvinf.setIntervalPattern("yMMMd", UCAL_MONTH, "y 'Diff' MMM d --- MMM d",status);
122        dtitvinf.setIntervalPattern("Hm", UCAL_HOUR_OF_DAY, "yyyy MMM d HH:mm ~ HH:mm",status);
123		// Set fallback interval pattern
124        dtitvinf.setFallbackIntervalPattern("{0} ~~~ {1}",status);
125		// Get the DateIntervalFormat with the custom pattern
126        UnicodeString formatEn,formatJa;
127		FieldPosition pos=0;
128		for (int i=0;i<2;i++){
129            for (int j=0;skeletons[j]!=NULL;j++) {
130			u_fprintf(out,"%-10S%-22S%-22S", skeletons[i].getTerminatedBuffer(),data[j].getTerminatedBuffer(), data[j+1].getTerminatedBuffer());
131            DateIntervalFormat* dtitvfmtEn = DateIntervalFormat::createInstance(skeletons[i],Locale::getEnglish(),dtitvinf,status);
132            DateIntervalFormat* dtitvfmtJa = DateIntervalFormat::createInstance(skeletons[i],Locale::getJapanese(),dtitvinf,status);
133			formatEn.remove();
134			formatJa.remove();
135			dtitvfmtEn->format(dtitvsample[j],formatEn,pos,status);
136			dtitvfmtJa->format(dtitvsample[j],formatJa,pos,status);
137			u_fprintf(out,"%-45S%-35S\n", formatEn.getTerminatedBuffer(),formatJa.getTerminatedBuffer());
138            }
139       }
140	u_fclose(out);
141	//! [dtitvfmtCustomized]
142/* output of the sample code:
143  ***************************************************************************************************************************************************************
144   Skeleton		from						to							Date Interval in en_US							Date Interval in Ja
145   yMMMd			2007-10-10 10:10:10			2007-11-10 10:10:10			2007 Diff Oct 10 --- Nov 10						2007 Diff 10月 10 --- 11月 10
146   yMMMd			2007-11-10 10:10:10			2007-11-10 22:10:10			Nov 10, 2007									2007年11月10
147   Hm				2007-10-10 10:10:10			2007-11-10 10:10:10			10/10/2007, 10:10 ~~~ 11/10/2007, 10:10			2007/10/10 10:10 ~~~ 2007/11/10 10:10
148   Hm				2007-11-10 10:10:10			2007-11-10 22:10:10			2007 Nov 10 10:10 ~ 22:10						2007 11月 10 10:10 ~ 22:10
149  ***************************************************************************************************************************************************************/
150}
151
152int main (int argc, char* argv[])
153{
154	dtitvfmtPreDefined();
155	dtitvfmtCustomized();
156	return 0;
157}