You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
5.8 KiB
145 lines
5.8 KiB
// © 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;
|
|
}
|