summaryrefslogtreecommitdiff
path: root/Build/source/libs/icu/icu-src/source/samples/dtitvfmtsample/dtitvfmtsample.cpp
blob: 3644fe01687510eeb43ce4fc89c622ecb3e2c1d8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
// © 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"),
            UnicodeString("")
        };
    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].isEmpty() ;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"),
            UnicodeString("")
        };
        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].isEmpty();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;
}