This is an exercise for the ICU Workshop (September 2000).
** Workshop homepage is:  
  http://oss.software.ibm.com/icu/docs/workshop_2000/agenda.html

  Day 2: September 12th 2000
  Pre-requsit:
  1. All the hardware and software requirements from Day 1.
  2. Attended or fully understand Day 1 material.
  3. Read through the ICU user's guide at
  http://oss.software.ibm.com/icu/userguide/.

  #Date/Time/Number Formatting Support
  9:30am - 10:30am
  Alan Liu

  Topics:
  1. What is the date/time support in ICU?
  2. What is the timezone support in ICU?
  3. What kind of formatting and parsing support is available in ICU, i.e.
  NumberFormat, DateFormat, MessageFormat?


INSTRUCTIONS
------------

This exercise was first developed and tested on ICU release 1.6.0, Win32,
Microsoft Visual C++ 6.0.  It should work on other ICU releases and
other platforms as well.

 MSVC:
   Open the file "datefmt.dsw" in Microsoft Visual C++.

 Unix:
   - Build and install ICU with a prefix, for example '--prefix=/home/srl/ICU'
   - Set the variable  ICU_PREFIX=/home/srl/ICU and use GNU make in 
        this directory.
   - You may use 'make check' to invoke this sample.

PROBLEMS
--------

Problem 0:

  Set up the program, build it, and run it.  To start with, the
  program prints out a list of languages.

Problem 1: Basic Date Formatting (Easy)

  Create a calendar, and use it to get the UDate for June 4, 1999,
  0:00 GMT (or any date of your choosing).  You will have to create a
  TimeZone (use the createZone() function already defined in main.cpp)
  and a Calendar object, and make the calendar use the time zone.

  Once you have the UDate, create a DateFormat object in each of the
  languages in the LANGUAGE array, and display the date in that
  language.  Use the DateFormat::createDateInstance() method to create
  the date formatter.

Problem 2: Date Formatting, Specific Time Zone (Medium)

  To really localize a time display, one can also specify the time
  zone in which the time should be displayed.  For each language,
  also create different time zones from the TIMEZONE list.

  To format a date with a specific calendar and zone, you must deal with
  three objects: a DateFormat, a Calendar, and a TimeZone.  Each object
  must be linked to another in correct sequence:  The Calendar must use
  the TimeZone, and the DateFormat must use the Calendar.

    DateFormat  =uses=>  Calendar  =uses=>  TimeZone

  Use either setFoo() or adoptFoo() methods, depending on where you
  want to have ownership.

  NOTE: It's not always desirable to change the time to a local time
  zone before display.  For instance, if some even occurs at 0:00 GMT
  on the first of the month, it's probably clearer to just state that.
  Stating that it occurs at 5:00 PM PDT on the day before in the
  summer, and 4:00 PM PST on the day before in the winter will just
  confuse the issue.


NOTES
-----

To see a list of system TimeZone IDs, use the TimeZone::create-
AvailableIDs() methods.  Alternatively, look at the file
icu/docs/tz.htm.  This has a hyperlinked list of current system zones.


ANSWERS
-------

The exercise includes answers.  These are in the "answers" directory,
and are numbered 1, 2, etc.

If you get stuck and you want to move to the next step, copy the
answers file into the main directory in order to proceed.  E.g.,
"main_1.cpp" contains the original "main.cpp" file.  "main_2.cpp"
contains the "main.cpp" file after problem 1.  Etc.


Have fun!
