********************************************************************** * Copyright (c) 2003-2004, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Author: Alan Liu * Created: August 18 2003 * Since: ICU 2.8 ********************************************************************** ---------------------------------------------------------------------- OVERVIEW This file describes the tools in icu/source/tools/tzcode The purpose of these tools is to process the zoneinfo or "Olson" time zone database into a form usable by ICU4C (release 2.8 and later). Unlike earlier releases, ICU4C 2.8 supports historical time zone behavior, as well as the full set of Olson compatibility IDs. References: ICU4C: http://oss.software.ibm.com/icu/ Olson: ftp://elsie.nci.nih.gov/pub/ ---------------------------------------------------------------------- ICU4C vs. ICU4J For ICU releases >= 2.8, both ICU4C and ICU4J implement full historical time zones, based on Olson data. The implementations in C and Java are somewhat different. The C implementation is a self-contained implementation, whereas ICU4J uses the underlying JDK 1.3 or 1.4 time zone implementation. Older versions of ICU (C and Java <= 2.6) implement a "present day snapshot". This only reflects current time zone behavior, without historical variation. Furthermore, it lacks the full set of Olson compatibility IDs. ---------------------------------------------------------------------- BACKGROUND The zoneinfo or "Olson" time zone package is used by various systems to describe the behavior of time zones. The package consists of several parts. E.g.: Index of ftp://elsie.nci.nih.gov/pub/ classictzcode.tar.gz 65 KB 12/10/1994 12:00:00 AM classictzdata.tar.gz 67 KB 12/10/1994 12:00:00 AM e5+57.tar.gz 2909 KB 3/22/1993 12:00:00 AM iso8601.ps.gz 16 KB 7/27/1996 12:00:00 AM leastsq.xls 49 KB 4/24/1997 12:00:00 AM ltroff.tar.gz 36 KB 7/16/1993 12:00:00 AM pi.shar.gz 4 KB 3/9/1994 12:00:00 AM tzarchive.gz 3412 KB 8/18/2003 4:00:00 AM tzcode2003a.tar.gz 98 KB 3/24/2003 2:32:00 PM tzdata2003a.tar.gz 132 KB 3/24/2003 2:32:00 PM ICU only uses the tzcodeYYYYV.tar.gz and tzdataYYYYV.tar.gz files, where YYYY is the year and V is the version letter ('a'...'z'). ---------------------------------------------------------------------- HOWTO 1. Obtain the current versions of tzcodeYYYYV.tar.gz (aka `tzcode') and tzdataYYYYV.tar.gz (aka `tzdata') from the FTP site given above. Either manually download or use wget: $ cd {path_to}/icu/source/tools/tzcode $ wget "ftp://elsie.nci.nih.gov/pub/tz*.tar.gz" 2. Unpack tzcode and tzdata directly into the directory tzcode: $ tar xzvf tzcode*.tar.gz $ tar xzvf tzdata*.tar.gz *** Make sure you only have ONE FILE named tzdata*.tar.gz in the directory. *** Do NOT delete the tzdata*.tar.gz file. The Makefile looks in the current directory to determine the version of Olson data it is building by looking for tzdata*.tar.gz. 3. Apply the ICU patch to zic.c: $ patch < patch-icu-tzcode If patch complains at this point, there is a mismatch that must be manually addressed. See the CVS log of `patch-icu-tzcode' for version details. 4. Build: $ make icu_data 5. Copy the data files to the correct location in the ICU4C/ICU4J source trees: $ cp zoneinfo.txt ../../../data/misc/ $ cp ZoneMetaData.java {path_to}/icu4j/src/com/ibm/icu/impl 6. Rebuild ICU: $ cd ../../../ $ {*make} 7. Don't forget to check in the new zoneinfo.txt (from its location at {path_to}/icu/source/data/misc/zoneinfo.txt) into CVS. ---------------------------------------------------------------------- HOWTO regenerate patch-icu-tzcode If you need to edit any of the tzcode* files, you will need to regenerate the patch file as follows. 1. Follow the above instructions to extract and patch the tzcode* files in {path_to}/icu/source/tools/tzcode. Modify any of the tzcode files. 2. Extract a clean set of the tzcode* files into a new directory, ../tzcode.orig/: $ mkdir ../tzcode.orig $ cd ../tzcode.orig $ tar xzf ../tzcode/tzcode*.tar.gz $ cd ../tzcode 3. Compute diffs, ignoring files that are in only one directory: $ diff -ur ../tzcode.orig . | grep -vE -e "^Only in " > patch-icu-tzcode 4. Test the patch-icu-tzcode file by regenerating and diffing the files again in another directory. The expected output from the final diff command is *nothing*. $ mkdir ../tzcode.new $ cd ../tzcode.new $ tar xzf ../tzcode/tzcode*.tar.gz $ patch < ../tzcode/patch-icu-tzcode $ cd ../tzcode $ diff -ur ../tzcode.new . | grep -vE -e "^Only in " 5. Check in the new patch-icu-tzcode file. ---------------------------------------------------------------------- eof