cupertino, ca, usa / september, 2000first icu developerworkshop1 date/time/number formatting alan...
TRANSCRIPT
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop1
Date/Time/Number Formatting
Alan Liu
Globalization Center of Competency
IBM Emerging Technology Center
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop2
Overview
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop3
The Problem
• Display a date in different languages– English: Friday, June 4, 1999– German: Freitag, 4. Juni 1999– French: vendredi 4 juin 1999
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop4
The Problem
• Display a date in different languages
• Convert a time between local time zones– Los Angeles: June 3, 1999 5:00 PM
PDT– New York: June 3, 1999 8:00 PM EDT– Paris: June 4, 1999 2:00 AM CEST
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop5
The Problem
• Display a date in different languages
• Convert a time between local time zones
• Handle daylight savings time– Sat. Oct. 28, 2000 3:00 PM PDT + 24 hours =– Sun. Oct. 29, 2000 2:00 PM PST
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop6
The Problem
• These problems boil down to:– Formatting– Parsing– Data conversion
• These operations apply to different data types:– Dates and times– Numbers, including currency amounts– Messages
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop7
Formatting and Parsing
• Formatting = conversion of binary data to text
• Parsing = conversion of text to binary data
• Different locales use different text to represent the same piece of binary data
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop8
Data Conversion
• In different locales, not only the form but also the value of displayed data may change
• Reflects different local conventions: time zone, definition of the week, calendar
• Applies only to dates and times
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop9
Data Conversion
• Displayed data values differ depending on the locale
• Underlying binary data does not change
• Displayed data: Calendar fields
• Underlying data: UDate scalar
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop10
Data Conversion
• Conversion happens implicitly during formatting and parsing
• Conversion can also be done explicitly
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop11
Date and Time
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop12
Date and Time
• Date and time stored together as a scalar
• Resolution of 1 millisecond
• Range roughly 70,000 BC to 70,000 AD
• Stored as absolute time independent of local time zones (GMT-based)
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop13
Date and Time
• Extensible calendar system
• Rule-based time zones with built-in data for all modern international zones (over 400)
• Rule-based date format with built-in data for many locales (over 140)
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop14
Date and Time Components
• UDate: GMT-based date and time (ms)• Calendar: Convert UDate to/from fields• TimeZone: Convert GMT to/from local zone• DateFormat: Convert UDate to/from text
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop15
Date and Time Components
• Fit together in a specific nested pattern
DateFormat
Calendar
TimeZone
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop16
Date and Time Components
• Fit together in a specific nested pattern1) Create
• TimeZone object zone• Calendar object cal• DateFormat object fmt
2) Set cal’s time zone to zone 3) Set fmt’s calendar to cal
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop17
Date and Time Components
• If components are not nested explicitly, then they use default objects, which can lead to errors
• DateFormat uses a default Calendar
• Calendar uses a default TimeZone
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop18
Calendar: Two Roles
• Always set to a specific UDate• Converts UDate to/from fields
– Fields are integer values for the month, day, year, hour, minutes, day of week, etc.
– See calendar.h for complete field list
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop19
Detail: Calendar Fields
• Conversion of fields to UDate
cal.clear();cal.set(YEAR, 1999);cal.set(MONTH, JUNE);cal.set(DAY_OF_WEEK, MONDAY);cal.set(WEEK_OF_MONTH, 2);UDate d = cal.getTime();
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop20
Detail: Calendar Fields
• Conversion of UDate to fields
cal.setTime(myUDate);int32_t month = cal.get(MONTH);
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop21
Time Zones
• Standard Olson (UNIX) time zone data• Over 400 international time zones• Does not rely on host OS• No historical time zone support• Time zones always used with calendars
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop22
Formatters: Code + Patterns
• Code contains generic pattern engine• Locale resources contain different patterns
– Different groups of patterns for different locales
– Within each group, different patterns for different variants; e.g., one for “Wed 6 Sep 00” and another for “Wednesday 7 September 2000”
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop23
Formatter: Types
• DateFormat already discussed• NumberFormat handles “$1,234.56”• MessageFormat handles “3 Files
Found”• ChoiceFormat handles “no
files”/“one file”
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop24
Formatters: Pattern Syntax
• Each formatter supports its own pattern syntax• For number and date formats, most users can
use locale data• For message format, users will have to write
their own patterns• See headers for pattern syntax documentation
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop25
Future Directions
• Support for time zone aliasing
• Support for traditional calendar systems
• Support for rule-based number formatting (e.g., “three hundred and sixty-four”)
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop26
Exercises
• Exercise 1 – datefmt– Use DateFormat to format a date and
time into several localized strings– Convert the date and time into local time
zones
Cupertino, CA, USA / September, 2000 First ICU DeveloperWorkshop27
Exercises
• Exercise 2 – msgfmt– Use MessageFormat to format a number
and date– Use a ChoiceFormat pattern to format
the number idiomatically