1
/******************************************************************************
2 * Copyright (C) 2008-2014, International Business Machines Corporation and
3 * others. All Rights Reserved.
4 *******************************************************************************
6 //! [dtitvfmtPreDefined1]
8 #include "unicode/dtitvfmt.h"
9 #include "unicode/ustdio.h"
10 //! [dtitvfmtPreDefined1]
14 static void dtitvfmtPreDefined() {
16 u_printf("===============================================================================\n");
17 u_printf(" dtitvfmtPreDefined()\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");
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")
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
),
47 UnicodeString skeletons
[] = {
48 UnicodeString("yMMMd"),
49 UnicodeString("MMMMd"),
53 u_fprintf(out
,"%-10s%-22s%-22s%-35s%-35s\n", "Skeleton","from","to","Date Interval in en_US","Date Interval in Ja");
55 UnicodeString formatEn
,formatJa
;
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
);
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());
73 //! [dtitvfmtPreDefined]
76 static void dtitvfmtCustomized() {
78 u_printf("===============================================================================\n");
80 u_printf(" dtitvfmtCustomized()\n");
82 u_printf(" Use DateIntervalFormat to create customized date interval format for yMMMd, Hm");
84 u_printf("================================================================================\n");
85 //! [dtitvfmtCustomized]
86 UFILE
*out
= u_finit(stdout
, NULL
, "UTF-8");
87 UErrorCode status
=U_ZERO_ERROR
;
88 UnicodeString data
[] = {
89 UnicodeString("2007-9-10 10:10:10"),
90 UnicodeString("2007-10-10 10:10:10"),
91 UnicodeString("2007-10-10 22:10:10")
93 // to create 2 Date Intervals
94 Calendar
*cal1
= Calendar::createInstance(status
);
95 cal1
->set(2007,9,10,10,10,10);
96 Calendar
*cal2
= Calendar::createInstance(status
);
97 cal2
->set(2007,10,10,10,10,10);
98 Calendar
*cal3
= Calendar::createInstance(status
);
99 cal3
->set(2007,10,10,22,10,10);
100 DateInterval
* dtitvsample
[] = {
101 new DateInterval(cal1
->getTime(status
),cal2
->getTime(status
)),
102 new DateInterval(cal2
->getTime(status
),cal3
->getTime(status
))
104 UnicodeString skeletons
[] = {
105 UnicodeString("yMMMd"),
109 u_printf("%-10s%-22s%-22s%-45s%-35s\n", "Skeleton", "from","to", "Date Interval in en_US","Date Interval in Ja");
110 // Create an empty DateIntervalInfo object
111 DateIntervalInfo dtitvinf
= DateIntervalInfo(status
);
112 // Set Date Time internal pattern for MONTH, HOUR_OF_DAY
113 dtitvinf
.setIntervalPattern("yMMMd", UCAL_MONTH
, "y 'Diff' MMM d --- MMM d",status
);
114 dtitvinf
.setIntervalPattern("Hm", UCAL_HOUR_OF_DAY
, "yyyy MMM d HH:mm ~ HH:mm",status
);
115 // Set fallback interval pattern
116 dtitvinf
.setFallbackIntervalPattern("{0} ~~~ {1}",status
);
117 // Get the DateIntervalFormat with the custom pattern
118 UnicodeString formatEn
,formatJa
;
120 for (int i
=0;i
<2;i
++){
121 for (int j
=0;skeletons
[j
]!=NULL
;j
++) {
122 u_fprintf(out
,"%-10S%-22S%-22S", skeletons
[i
].getTerminatedBuffer(),data
[j
].getTerminatedBuffer(), data
[j
+1].getTerminatedBuffer());
123 DateIntervalFormat
* dtitvfmtEn
= DateIntervalFormat::createInstance(skeletons
[i
],Locale::getEnglish(),dtitvinf
,status
);
124 DateIntervalFormat
* dtitvfmtJa
= DateIntervalFormat::createInstance(skeletons
[i
],Locale::getJapanese(),dtitvinf
,status
);
127 dtitvfmtEn
->format(dtitvsample
[j
],formatEn
,pos
,status
);
128 dtitvfmtJa
->format(dtitvsample
[j
],formatJa
,pos
,status
);
129 u_fprintf(out
,"%-45S%-35S\n", formatEn
.getTerminatedBuffer(),formatJa
.getTerminatedBuffer());
133 //! [dtitvfmtCustomized]
136 int main (int argc
, char* argv
[])
138 dtitvfmtPreDefined();
139 dtitvfmtCustomized();