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 ******************************************************************************* 7 */ 8 //! [dtitvfmtPreDefined1] 9 #include <iostream> 10 #include "unicode/dtitvfmt.h" 11 #include "unicode/ustdio.h" 12 //! [dtitvfmtPreDefined1] 13 14 using namespace std; 15 using namespace icu; 16 17 static void dtitvfmtPreDefined() { 18 19 u_printf("===============================================================================\n"); 20 u_printf(" dtitvfmtPreDefined()\n"); 21 u_printf("\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"); 25 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") 35 }; 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), 49 }; 50 UnicodeString skeletons[] = { 51 UnicodeString("yMMMd"), 52 UnicodeString("MMMMd"), 53 UnicodeString("jm"), 54 0, 55 }; 56 u_fprintf(out,"%-10s%-22s%-22s%-35s%-35s\n", "Skeleton","from","to","Date Interval in en_US","Date Interval in Ja"); 57 int i=0; 58 UnicodeString formatEn,formatJa; 59 FieldPosition pos=0; 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); 65 formatEn.remove(); 66 formatJa.remove(); 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()); 71 delete dtitvfmtEn; 72 delete dtitvfmtJa; 73 i++; 74 } 75 u_fclose(out); 76 //! [dtitvfmtPreDefined] 77 } 78 79 static void dtitvfmtCustomized() { 80 81 u_printf("===============================================================================\n"); 82 u_printf("\n"); 83 u_printf(" dtitvfmtCustomized()\n"); 84 u_printf("\n"); 85 u_printf(" Use DateIntervalFormat to create customized date interval format for yMMMd, Hm"); 86 u_printf("\n"); 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") 95 }; 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)) 106 }; 107 UnicodeString skeletons[] = { 108 UnicodeString("yMMMd"), 109 UnicodeString("Hm"), 110 0, 111 }; 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; 122 FieldPosition pos=0; 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); 128 formatEn.remove(); 129 formatJa.remove(); 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()); 133 } 134 } 135 u_fclose(out); 136 //! [dtitvfmtCustomized] 137 } 138 139 int main (int argc, char* argv[]) 140 { 141 dtitvfmtPreDefined(); 142 dtitvfmtCustomized(); 143 return 0; 144 } 145