|  | This is an exercise for the ICU Workshop (September 2000). | 
|  |  | 
|  | 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 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. | 
|  |  | 
|  | To install:  Create a folder "datefmt" at: | 
|  |  | 
|  | <icu>/source/samples/msgfmt | 
|  |  | 
|  | Within it, place the files: | 
|  |  | 
|  | msgfmt.dsp | 
|  | msgfmt.dsw | 
|  | main.cpp | 
|  | util.cpp | 
|  | util.h | 
|  |  | 
|  | Open the file "msgfmt.dsw" in Microsoft Visual C++. | 
|  |  | 
|  |  | 
|  | PROBLEMS | 
|  | -------- | 
|  |  | 
|  | Problem 0: | 
|  |  | 
|  | Set up the program, build it, and run it.  To start with, the | 
|  | program prints out the word "Message". | 
|  |  | 
|  | Problem 1: Basic Message Formatting (Easy) | 
|  |  | 
|  | Use a MessageFormat to create a message that prints out "Received | 
|  | <n> argument(s) on <d>.", where n is the number of command line | 
|  | arguments (use argc-1), and d is the date (use Calendar::getNow()). | 
|  |  | 
|  | HINT: Your message pattern should have a "number" element and a | 
|  | "date" element, and you will need to use Formattable. | 
|  |  | 
|  | Problem 2: ChoiceFormat (Medium) | 
|  |  | 
|  | We can do better than "argument(s)".  Instead, we can display more | 
|  | idiomatic strings, such as "no arguments", "one argument", "two | 
|  | arguments", and for higher values, we can use a number format. | 
|  |  | 
|  | This kind of value-based switching is done using a ChoiceFormat. | 
|  | However, you seldom needs to create a ChoiceFormat by itself. | 
|  | Instead, most of the time you will supply the ChoiceFormat pattern | 
|  | within a MessageFormat pattern. | 
|  |  | 
|  | Use a ChoiceFormat pattern within the MessageFormat pattern, instead | 
|  | of the "number" element, to display more idiomatic strings. | 
|  |  | 
|  | EXTRA: Embed a number element within the choice element to handle | 
|  | values greater than two. | 
|  |  | 
|  |  | 
|  | 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! |