1
0
Fork 0
arangodb/3rdParty/icu/source/samples/dtitvfmtsample/dtitvfmtsample.cpp

157 lines
7.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/********************************************************************************
* Copyright (C) 2008-2013, International Business Machines Corporation and
* others. All Rights Reserved.
*******************************************************************************
*/
//! [dtitvfmtPreDefined1]
#include <iostream>
#include "unicode/dtitvfmt.h"
#include "unicode/ustdio.h"
//! [dtitvfmtPreDefined1]
using namespace std;
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]
/* output of the sample code:
*********************************************************************************************************************************************************
Skeleton from to Date Interval in en_US Date Interval in Ja
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日
MMMMd 2008-10-10 10:10:10 2008-11-10 10:10:10 November 10 December 10 11月10日12月10日
jm 2008-11-10 10:10:10 2008-11-10 15:10:10 10:10 AM 3:10 PM 10:1015:10
*********************************************************************************************************************************************************/
}
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]
/* output of the sample code:
***************************************************************************************************************************************************************
Skeleton from to Date Interval in en_US Date Interval in Ja
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
yMMMd 2007-11-10 10:10:10 2007-11-10 22:10:10 Nov 10, 2007 2007年11月10
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
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
***************************************************************************************************************************************************************/
}
int main (int argc, char* argv[])
{
dtitvfmtPreDefined();
dtitvfmtCustomized();
return 0;
}