16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/********************************************************************************
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 2008-2013, International Business Machines Corporation and
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* others. All Rights Reserved.
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//! [dtitvfmtPreDefined1]
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <iostream>
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/dtitvfmt.h"
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ustdio.h"
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org//! [dtitvfmtPreDefined1]
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgusing namespace std;
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void dtitvfmtPreDefined() {
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	u_printf("===============================================================================\n");
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	u_printf(" dtitvfmtPreDefined()\n");
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    u_printf("\n");
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    u_printf(" Use DateIntervalFormat to get date interval format for pre-defined skeletons:\n");
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    u_printf(" yMMMd, MMMMd, jm per locale\n");
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    u_printf("===============================================================================\n");
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	//! [dtitvfmtPreDefined]
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UFILE *out = u_finit(stdout, NULL, "UTF-8");
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UErrorCode status =U_ZERO_ERROR;
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	// create 3 Date Intervals
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UnicodeString data[] = {
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		UnicodeString("2007-10-10 10:10:10"),
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		UnicodeString("2008-10-10 10:10:10"),
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		UnicodeString("2008-11-10 10:10:10"),
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		UnicodeString("2008-11-10 15:10:10")
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		};
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	Calendar *cal = Calendar::createInstance(status);
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	cal->set(2007,10,10,10,10,10);
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UDate date1 = cal->getTime(status);
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	cal->set(2008,10,10,10,10,10);
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UDate date2 = cal->getTime(status);
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	cal->set(2008,11,10,10,10,10);
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UDate date3 = cal->getTime(status);
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	cal->set(2008,11,10,15,10,10);
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UDate date4 = cal->getTime(status);
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DateInterval* dtitvsample[] = {
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			new DateInterval(date1,date2),
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new DateInterval(date2,date3),
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			new DateInterval(date3,date4),
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        };
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 	UnicodeString skeletons[] = {
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UnicodeString("yMMMd"),
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UnicodeString("MMMMd"),
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UnicodeString("jm"),
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			0,
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		};
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    u_fprintf(out,"%-10s%-22s%-22s%-35s%-35s\n", "Skeleton","from","to","Date Interval in en_US","Date Interval in Ja");
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	int i=0;
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UnicodeString formatEn,formatJa;
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	FieldPosition pos=0;
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (int j=0;skeletons[j]!=NULL ;j++) {
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 		 u_fprintf(out,"%-10S%-22S%-22S",skeletons[j].getTerminatedBuffer(),data[i].getTerminatedBuffer(),data[i+1].getTerminatedBuffer());
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         //create a DateIntervalFormat instance for given skeleton, locale
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		 DateIntervalFormat* dtitvfmtEn = DateIntervalFormat::createInstance(skeletons[j], Locale::getEnglish(),status);
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         DateIntervalFormat* dtitvfmtJa = DateIntervalFormat::createInstance(skeletons[j], Locale::getJapanese(),status);
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		 formatEn.remove();
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		 formatJa.remove();
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		 //get the DateIntervalFormat
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		 dtitvfmtEn->format(dtitvsample[i],formatEn,pos,status);
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		 dtitvfmtJa->format(dtitvsample[i],formatJa,pos,status);
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         u_fprintf(out,"%-35S%-35S\n", formatEn.getTerminatedBuffer(),formatJa.getTerminatedBuffer());
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		 delete dtitvfmtEn;
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		 delete dtitvfmtJa;
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org         i++;
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        }
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	u_fclose(out);
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	//! [dtitvfmtPreDefined]
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* output of the sample code:
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  *********************************************************************************************************************************************************
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   Skeleton		from								to								Date Interval in en_US				Date Interval in Ja
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   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日
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   MMMMd			2008-10-10 10:10:10					2008-11-10 10:10:10				November 10 – December 10			11月10日~12月10日
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   jm				2008-11-10 10:10:10					2008-11-10 15:10:10				10:10 AM – 3:10 PM					10:10~15:10
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  *********************************************************************************************************************************************************/
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void dtitvfmtCustomized() {
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	u_printf("===============================================================================\n");
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	u_printf("\n");
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	u_printf(" dtitvfmtCustomized()\n");
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	u_printf("\n");
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    u_printf(" Use DateIntervalFormat to create customized date interval format for yMMMd, Hm");
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	u_printf("\n");
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    u_printf("================================================================================\n");
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	//! [dtitvfmtCustomized]
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UFILE *out = u_finit(stdout, NULL, "UTF-8");
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UErrorCode status =U_ZERO_ERROR;
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UnicodeString data[] = {
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		UnicodeString("2007-9-10 10:10:10"),
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		UnicodeString("2007-10-10 10:10:10"),
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		UnicodeString("2007-10-10 22:10:10")
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		};
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	// to create 2 Date Intervals
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal1 = Calendar::createInstance(status);
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	cal1->set(2007,9,10,10,10,10);
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	Calendar *cal2 = Calendar::createInstance(status);
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	cal2->set(2007,10,10,10,10,10);
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	Calendar *cal3 = Calendar::createInstance(status);
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	cal3->set(2007,10,10,22,10,10);
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	DateInterval* dtitvsample[] = {
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			new DateInterval(cal1->getTime(status),cal2->getTime(status)),
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            new DateInterval(cal2->getTime(status),cal3->getTime(status))
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	      };
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	UnicodeString skeletons[] = {
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UnicodeString("yMMMd"),
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UnicodeString("Hm"),
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			0,
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        };
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		u_printf("%-10s%-22s%-22s%-45s%-35s\n", "Skeleton", "from","to", "Date Interval in en_US","Date Interval in Ja");
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		// Create an empty DateIntervalInfo object
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        DateIntervalInfo dtitvinf =  DateIntervalInfo(status);
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		// Set Date Time internal pattern for MONTH, HOUR_OF_DAY
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dtitvinf.setIntervalPattern("yMMMd", UCAL_MONTH, "y 'Diff' MMM d --- MMM d",status);
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dtitvinf.setIntervalPattern("Hm", UCAL_HOUR_OF_DAY, "yyyy MMM d HH:mm ~ HH:mm",status);
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		// Set fallback interval pattern
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        dtitvinf.setFallbackIntervalPattern("{0} ~~~ {1}",status);
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		// Get the DateIntervalFormat with the custom pattern
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UnicodeString formatEn,formatJa;
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		FieldPosition pos=0;
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org		for (int i=0;i<2;i++){
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            for (int j=0;skeletons[j]!=NULL;j++) {
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			u_fprintf(out,"%-10S%-22S%-22S", skeletons[i].getTerminatedBuffer(),data[j].getTerminatedBuffer(), data[j+1].getTerminatedBuffer());
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            DateIntervalFormat* dtitvfmtEn = DateIntervalFormat::createInstance(skeletons[i],Locale::getEnglish(),dtitvinf,status);
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            DateIntervalFormat* dtitvfmtJa = DateIntervalFormat::createInstance(skeletons[i],Locale::getJapanese(),dtitvinf,status);
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			formatEn.remove();
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			formatJa.remove();
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			dtitvfmtEn->format(dtitvsample[j],formatEn,pos,status);
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			dtitvfmtJa->format(dtitvsample[j],formatJa,pos,status);
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org			u_fprintf(out,"%-45S%-35S\n", formatEn.getTerminatedBuffer(),formatJa.getTerminatedBuffer());
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            }
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org       }
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	u_fclose(out);
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	//! [dtitvfmtCustomized]
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* output of the sample code:
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  ***************************************************************************************************************************************************************
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   Skeleton		from						to							Date Interval in en_US							Date Interval in Ja
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   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
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   yMMMd			2007-11-10 10:10:10			2007-11-10 22:10:10			Nov 10, 2007									2007年11月10
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   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
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   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
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  ***************************************************************************************************************************************************************/
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint main (int argc, char* argv[])
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	dtitvfmtPreDefined();
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	dtitvfmtCustomized();
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org	return 0;
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}