1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
3 /******************************************************************************
4 * Copyright (C) 2008-2014, International Business Machines Corporation and
5 * others. All Rights Reserved.
6 *******************************************************************************
8 //! [dtitvfmtPreDefined1]
10 #include "unicode/dtitvfmt.h"
11 #include "unicode/ustdio.h"
12 //! [dtitvfmtPreDefined1]
17 static void dtitvfmtPreDefined() {
19 u_printf("===============================================================================\n");
20 u_printf(" dtitvfmtPreDefined()\n");
22 u_printf(" Use DateIntervalFormat to get date interval format for pre-defined skeletons:\n");
23 u_printf(" yMMMd, MMMMd, jm per locale\n");
24 u_printf("===============================================================================\n");
26 //! [dtitvfmtPreDefined]
27 UFILE
*out
= u_finit(stdout
, NULL
, "UTF-8");
28 UErrorCode status
=U_ZERO_ERROR
;
29 // create 3 Date Intervals
30 UnicodeString data
[] = {
31 UnicodeString("2007-10-10 10:10:10"),
32 UnicodeString("2008-10-10 10:10:10"),
33 UnicodeString("2008-11-10 10:10:10"),
34 UnicodeString("2008-11-10 15:10:10")
36 Calendar
*cal
= Calendar::createInstance(status
);
37 cal
->set(2007,10,10,10,10,10);
38 UDate date1
= cal
->getTime(status
);
39 cal
->set(2008,10,10,10,10,10);
40 UDate date2
= cal
->getTime(status
);
41 cal
->set(2008,11,10,10,10,10);
42 UDate date3
= cal
->getTime(status
);
43 cal
->set(2008,11,10,15,10,10);
44 UDate date4
= cal
->getTime(status
);
45 DateInterval
* dtitvsample
[] = {
46 new DateInterval(date1
,date2
),
47 new DateInterval(date2
,date3
),
48 new DateInterval(date3
,date4
),
50 UnicodeString skeletons
[] = {
51 UnicodeString("yMMMd"),
52 UnicodeString("MMMMd"),
56 u_fprintf(out
,"%-10s%-22s%-22s%-35s%-35s\n", "Skeleton","from","to","Date Interval in en_US","Date Interval in Ja");
58 UnicodeString formatEn
,formatJa
;
60 for (int j
=0;skeletons
[j
]!=NULL
;j
++) {
61 u_fprintf(out
,"%-10S%-22S%-22S",skeletons
[j
].getTerminatedBuffer(),data
[i
].getTerminatedBuffer(),data
[i
+1].getTerminatedBuffer());
62 //create a DateIntervalFormat instance for given skeleton, locale
63 DateIntervalFormat
* dtitvfmtEn
= DateIntervalFormat::createInstance(skeletons
[j
], Locale::getEnglish(),status
);
64 DateIntervalFormat
* dtitvfmtJa
= DateIntervalFormat::createInstance(skeletons
[j
], Locale::getJapanese(),status
);
67 //get the DateIntervalFormat
68 dtitvfmtEn
->format(dtitvsample
[i
],formatEn
,pos
,status
);
69 dtitvfmtJa
->format(dtitvsample
[i
],formatJa
,pos
,status
);
70 u_fprintf(out
,"%-35S%-35S\n", formatEn
.getTerminatedBuffer(),formatJa
.getTerminatedBuffer());
76 //! [dtitvfmtPreDefined]
79 static void dtitvfmtCustomized() {
81 u_printf("===============================================================================\n");
83 u_printf(" dtitvfmtCustomized()\n");
85 u_printf(" Use DateIntervalFormat to create customized date interval format for yMMMd, Hm");
87 u_printf("================================================================================\n");
88 //! [dtitvfmtCustomized]
89 UFILE
*out
= u_finit(stdout
, NULL
, "UTF-8");
90 UErrorCode status
=U_ZERO_ERROR
;
91 UnicodeString data
[] = {
92 UnicodeString("2007-9-10 10:10:10"),
93 UnicodeString("2007-10-10 10:10:10"),
94 UnicodeString("2007-10-10 22:10:10")
96 // to create 2 Date Intervals
97 Calendar
*cal1
= Calendar::createInstance(status
);
98 cal1
->set(2007,9,10,10,10,10);
99 Calendar
*cal2
= Calendar::createInstance(status
);
100 cal2
->set(2007,10,10,10,10,10);
101 Calendar
*cal3
= Calendar::createInstance(status
);
102 cal3
->set(2007,10,10,22,10,10);
103 DateInterval
* dtitvsample
[] = {
104 new DateInterval(cal1
->getTime(status
),cal2
->getTime(status
)),
105 new DateInterval(cal2
->getTime(status
),cal3
->getTime(status
))
107 UnicodeString skeletons
[] = {
108 UnicodeString("yMMMd"),
112 u_printf("%-10s%-22s%-22s%-45s%-35s\n", "Skeleton", "from","to", "Date Interval in en_US","Date Interval in Ja");
113 // Create an empty DateIntervalInfo object
114 DateIntervalInfo dtitvinf
= DateIntervalInfo(status
);
115 // Set Date Time internal pattern for MONTH, HOUR_OF_DAY
116 dtitvinf
.setIntervalPattern("yMMMd", UCAL_MONTH
, "y 'Diff' MMM d --- MMM d",status
);
117 dtitvinf
.setIntervalPattern("Hm", UCAL_HOUR_OF_DAY
, "yyyy MMM d HH:mm ~ HH:mm",status
);
118 // Set fallback interval pattern
119 dtitvinf
.setFallbackIntervalPattern("{0} ~~~ {1}",status
);
120 // Get the DateIntervalFormat with the custom pattern
121 UnicodeString formatEn
,formatJa
;
123 for (int i
=0;i
<2;i
++){
124 for (int j
=0;skeletons
[j
]!=NULL
;j
++) {
125 u_fprintf(out
,"%-10S%-22S%-22S", skeletons
[i
].getTerminatedBuffer(),data
[j
].getTerminatedBuffer(), data
[j
+1].getTerminatedBuffer());
126 DateIntervalFormat
* dtitvfmtEn
= DateIntervalFormat::createInstance(skeletons
[i
],Locale::getEnglish(),dtitvinf
,status
);
127 DateIntervalFormat
* dtitvfmtJa
= DateIntervalFormat::createInstance(skeletons
[i
],Locale::getJapanese(),dtitvinf
,status
);
130 dtitvfmtEn
->format(dtitvsample
[j
],formatEn
,pos
,status
);
131 dtitvfmtJa
->format(dtitvsample
[j
],formatJa
,pos
,status
);
132 u_fprintf(out
,"%-45S%-35S\n", formatEn
.getTerminatedBuffer(),formatJa
.getTerminatedBuffer());
136 //! [dtitvfmtCustomized]
139 int main (int argc
, char* argv
[])
141 dtitvfmtPreDefined();
142 dtitvfmtCustomized();