// © 2016 and later: Unicode, Inc. and others. // License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2008-2014, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* */ //! [dtitvfmtPreDefined1] #include <iostream> #include "unicode/dtitvfmt.h" #include "unicode/ustdio.h" //! [dtitvfmtPreDefined1] using namespace std; using namespace icu; static void dtitvfmtPreDefined() { u_printf("===============================================================================\n"); u_printf(" dtitvfmtPreDefined()\n"); u_printf("\n"); u_printf(" Use DateIntervalFormat to get date interval format for pre-defined skeletons:\n"); u_printf(" yMMMd, MMMMd, jm per locale\n"); u_printf("===============================================================================\n"); //! [dtitvfmtPreDefined] UFILE *out = u_finit(stdout, NULL, "UTF-8"); UErrorCode status =U_ZERO_ERROR; // create 3 Date Intervals UnicodeString data[] = { UnicodeString("2007-10-10 10:10:10"), UnicodeString("2008-10-10 10:10:10"), UnicodeString("2008-11-10 10:10:10"), UnicodeString("2008-11-10 15:10:10") }; Calendar *cal = Calendar::createInstance(status); cal->set(2007,10,10,10,10,10); UDate date1 = cal->getTime(status); cal->set(2008,10,10,10,10,10); UDate date2 = cal->getTime(status); cal->set(2008,11,10,10,10,10); UDate date3 = cal->getTime(status); cal->set(2008,11,10,15,10,10); UDate date4 = cal->getTime(status); DateInterval* dtitvsample[] = { new DateInterval(date1,date2), new DateInterval(date2,date3), new DateInterval(date3,date4), }; UnicodeString skeletons[] = { UnicodeString("yMMMd"), UnicodeString("MMMMd"), UnicodeString("jm"), 0, }; u_fprintf(out,"%-10s%-22s%-22s%-35s%-35s\n", "Skeleton","from","to","Date Interval in en_US","Date Interval in Ja"); int i=0; UnicodeString formatEn,formatJa; FieldPosition pos=0; for (int j=0;skeletons[j]!=NULL ;j++) { u_fprintf(out,"%-10S%-22S%-22S",skeletons[j].getTerminatedBuffer(),data[i].getTerminatedBuffer(),data[i+1].getTerminatedBuffer()); //create a DateIntervalFormat instance for given skeleton, locale DateIntervalFormat* dtitvfmtEn = DateIntervalFormat::createInstance(skeletons[j], Locale::getEnglish(),status); DateIntervalFormat* dtitvfmtJa = DateIntervalFormat::createInstance(skeletons[j], Locale::getJapanese(),status); formatEn.remove(); formatJa.remove(); //get the DateIntervalFormat dtitvfmtEn->format(dtitvsample[i],formatEn,pos,status); dtitvfmtJa->format(dtitvsample[i],formatJa,pos,status); u_fprintf(out,"%-35S%-35S\n", formatEn.getTerminatedBuffer(),formatJa.getTerminatedBuffer()); delete dtitvfmtEn; delete dtitvfmtJa; i++; } u_fclose(out); //! [dtitvfmtPreDefined] } static void dtitvfmtCustomized() { u_printf("===============================================================================\n"); u_printf("\n"); u_printf(" dtitvfmtCustomized()\n"); u_printf("\n"); u_printf(" Use DateIntervalFormat to create customized date interval format for yMMMd, Hm"); u_printf("\n"); u_printf("================================================================================\n"); //! [dtitvfmtCustomized] UFILE *out = u_finit(stdout, NULL, "UTF-8"); UErrorCode status =U_ZERO_ERROR; UnicodeString data[] = { UnicodeString("2007-9-10 10:10:10"), UnicodeString("2007-10-10 10:10:10"), UnicodeString("2007-10-10 22:10:10") }; // to create 2 Date Intervals Calendar *cal1 = Calendar::createInstance(status); cal1->set(2007,9,10,10,10,10); Calendar *cal2 = Calendar::createInstance(status); cal2->set(2007,10,10,10,10,10); Calendar *cal3 = Calendar::createInstance(status); cal3->set(2007,10,10,22,10,10); DateInterval* dtitvsample[] = { new DateInterval(cal1->getTime(status),cal2->getTime(status)), new DateInterval(cal2->getTime(status),cal3->getTime(status)) }; UnicodeString skeletons[] = { UnicodeString("yMMMd"), UnicodeString("Hm"), 0, }; u_printf("%-10s%-22s%-22s%-45s%-35s\n", "Skeleton", "from","to", "Date Interval in en_US","Date Interval in Ja"); // Create an empty DateIntervalInfo object DateIntervalInfo dtitvinf = DateIntervalInfo(status); // Set Date Time internal pattern for MONTH, HOUR_OF_DAY dtitvinf.setIntervalPattern("yMMMd", UCAL_MONTH, "y 'Diff' MMM d --- MMM d",status); dtitvinf.setIntervalPattern("Hm", UCAL_HOUR_OF_DAY, "yyyy MMM d HH:mm ~ HH:mm",status); // Set fallback interval pattern dtitvinf.setFallbackIntervalPattern("{0} ~~~ {1}",status); // Get the DateIntervalFormat with the custom pattern UnicodeString formatEn,formatJa; FieldPosition pos=0; for (int i=0;i<2;i++){ for (int j=0;skeletons[j]!=NULL;j++) { u_fprintf(out,"%-10S%-22S%-22S", skeletons[i].getTerminatedBuffer(),data[j].getTerminatedBuffer(), data[j+1].getTerminatedBuffer()); DateIntervalFormat* dtitvfmtEn = DateIntervalFormat::createInstance(skeletons[i],Locale::getEnglish(),dtitvinf,status); DateIntervalFormat* dtitvfmtJa = DateIntervalFormat::createInstance(skeletons[i],Locale::getJapanese(),dtitvinf,status); formatEn.remove(); formatJa.remove(); dtitvfmtEn->format(dtitvsample[j],formatEn,pos,status); dtitvfmtJa->format(dtitvsample[j],formatJa,pos,status); u_fprintf(out,"%-45S%-35S\n", formatEn.getTerminatedBuffer(),formatJa.getTerminatedBuffer()); } } u_fclose(out); //! [dtitvfmtCustomized] } int main (int argc, char* argv[]) { dtitvfmtPreDefined(); dtitvfmtCustomized(); return 0; }