16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/********************************************************************
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT:
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1999-2002, International Business Machines Corporation and
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * others. All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/unistr.h"
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/calendar.h"
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/datefmt.h"
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdio.h>
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdlib.h>
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "util.h"
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If the ID supplied to TimeZone is not a valid system ID,
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * TimeZone::createTimeZone() will return a GMT zone object.  In order
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to detect this error, we check the ID of the returned zone against
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the ID we requested.  If they don't match, we fail with an error.
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgTimeZone* createZone(const UnicodeString& id) {
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString str;
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    TimeZone* zone = TimeZone::createTimeZone(id);
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    if (zone->getID(str) != id) {
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        delete zone;
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        printf("Error: TimeZone::createTimeZone(");
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        uprintf(id);
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        printf(") returned zone with ID ");
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        uprintf(str);
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        printf("\n");
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        exit(1);
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return zone;
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgint main(int argc, char **argv) {
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    Calendar *cal;
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    TimeZone *zone;
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    DateFormat *fmt;
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UErrorCode status = U_ZERO_ERROR;
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UnicodeString str;
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UDate date;
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // The languages in which we will display the date
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static char* LANGUAGE[] = {
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        "en", "de", "fr"
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static const int32_t N_LANGUAGE = sizeof(LANGUAGE)/sizeof(LANGUAGE[0]);
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // The time zones in which we will display the time
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static char* TIMEZONE[] = {
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        "America/Los_Angeles",
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        "America/New_York",
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        "Europe/Paris",
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        "Europe/Berlin"
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    };
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    static const int32_t N_TIMEZONE = sizeof(TIMEZONE)/sizeof(TIMEZONE[0]);
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    // Create a calendar
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal = Calendar::createInstance(status);
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    check(status, "Calendar::createInstance");
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    zone = createZone("GMT"); // Create a GMT zone
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->adoptTimeZone(zone);
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->clear();
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    cal->set(1999, Calendar::JUNE, 4);
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    date = cal->getTime(status);
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    check(status, "Calendar::getTime");
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    for (int32_t i=0; i<N_LANGUAGE; ++i) {
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        Locale loc(LANGUAGE[i]);
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Create a formatter for DATE
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fmt = DateFormat::createDateInstance(DateFormat::kFull, loc);
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Format the date
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        str.remove();
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        fmt->format(date, str, status);
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        // Display the formatted date string
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        printf("Date (%s): ", LANGUAGE[i]);
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        uprintf(escape(str));
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        printf("\n\n");
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    }
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    printf("Exiting successfully\n");
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    return 0;
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}
88