// © 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;
}