juretta.com

New Zealand Daylight Saving Time Change: Mac OS X and Java

October 05, 2007
Tags: Java Mac
It appears that Apple missed the new rules for Daylight Saving Time (DST) in New Zealand in even the most recent versions of Mac OS X 10.4 Tiger.
From this year [2007], Daylight Saving will run for a period of 27 weeks. It now commences from the last Sunday in September, when 2.00am becomes 3.00am, and ends on the first Sunday in April the following year, when 3.00am becomes 2.00am.

Mac OS X still thinks that the Daylight Saving time starts on Oct. 7th.

The knowledgebase entry is rather disappointing

Deselect (uncheck) 'Set Date & Time automatically' if it's enabled.
Manually set the correct time.

A better approach is to update the timezone database that is used to compute the correct time for your timezone in relation to UTC (Read more):
GMT_TIME + LOCAL_TIME_ZONE_OFFSET + DST_OFFSET.

First check if you have to update the timezone information (assuming you have selected NZST/NZDT as your local timezone):

macbook-pro:~ stefan$ zdump -v /etc/localtime | grep 2007
/etc/localtime Sat Mar 17 13:59:59 2007 UTC = Sun Mar 18 02:59:59 2007 NZDT isdst=1 
/etc/localtime Sat Mar 17 14:00:00 2007 UTC = Sun Mar 18 02:00:00 2007 NZST isdst=0 
/etc/localtime Sat Oct 6 13:59:59 2007 UTC = Sun Oct 7 01:59:59 2007 NZST isdst=0 
/etc/localtime Sat Oct 6 14:00:00 2007 UTC = Sun Oct 7 03:00:00 2007 NZDT isdst=1

This shows that the Mac thinks that the daylight saving time (NZDT) will start on Sun Oct 7. That's wrong.

To update the Mac OS X timezone database download the latest tzdata2007_.tar.gz from ftp://elsie.nci.nih.gov/pub/. As of Oct 1 it's ftp://elsie.nci.nih.gov/pub/tzdata2007h.tar.gz

macbook-pro:~ stefan$ curl -O ftp://elsie.nci.nih.gov/pub/tzdata2007h.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  158k  100  158k    0     0   4851      0  0:00:33  0:00:33 --:--:--  7928
Extract the archive and run the zic timezone compiler
macbook-pro:~ stefan$ mkdir tzdata; tar -xvzf tzdata2007h.tar.gz -C tzdata
macbook-pro:~ stefan$ cd tzdata; sudo zic australasia

You might want to reboot the system to enable the new timezone information.

Check again:
macbook-pro:~ stefan$ zdump -v /etc/localtime | grep 2007
/etc/localtime  Sat Mar 17 13:59:59 2007 UTC = Sun Mar 18 02:59:59 2007 NZDT isdst=1
/etc/localtime  Sat Mar 17 14:00:00 2007 UTC = Sun Mar 18 02:00:00 2007 NZST isdst=0
/etc/localtime  Sat Sep 29 13:59:59 2007 UTC = Sun Sep 30 01:59:59 2007 NZST isdst=0
/etc/localtime  Sat Sep 29 14:00:00 2007 UTC = Sun Sep 30 03:00:00 2007 NZDT isdst=1
Java Update

The JRE uses its own timezone database (unfortunately). We need to update this information as well.

Got to http://java.sun.com/javase/downloads/index.jsp and get the JDK DST Timezone Update Tool - 1.2.2.

Expand the archive and run the tzupdater.jar: sudo java -Djava.vendor="Sun Microsystems Inc." -jar tzupdater.jar -v -u

macbook-pro:~ stefan$ sudo java -Djava.vendor="Sun Microsystems Inc." -jar tzupdater.jar -v -u 
Password:
java.home: /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home
java.vendor: Sun Microsystems Inc.
java.version: 1.6.0-dp
JRE time zone data version: tzdata2006a
Embedded time zone data version: tzdata2007g
Extracting files... done.
Renaming directories... done.
Validating the new time zone data... done.
Time zone data update is complete.
Quick check:
Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("Pacific/Auckland"));
cal.setTimeInMillis(new Date().getTime());	
System.out.format("%1$tT (%1$tB %1$td %1$tY)", cal, new Locale("de", "DE"));

About

This is the defunct blog of Stefan Saasen.