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}