My final Jornada 720 DST solution

Back in March I posted about my solutions to the new DST change dates for various devices I own. At the time I had not yet decided how to handle the situation on my Jornada 720 running the HPC2000 version of Windows CE 3.0.

The problem with older WinCE devices is that time zone information is contained in an unchangeable DLL located in ROM (citydb.dll). When you use the World Clock control panel applet to change the city it calls the DLL and you end up with the old DST change dates again. I have not found any solution that lets you still use the control panel to change cities and keep the DST settings intact.

The only solution I’ve found is to manually edit the registry keys for the new DST dates after every time you change the city setting. This isn’t a big problem for me as I don’t travel to other time zones more than every few years.

The manual registry changes are straight forward, last Sunday in October (0A, 05) becomes the first Sunday in November (0B, 01). The spring event changes from first Sunday in April (04, 01) to the 2nd Sunday in March (03, 02).

I used the registry editor built into the Microsoft embedded Visual Tools programming environment. The key you need to change is, HKEY_LOCAL_MACHINETimeTimeZoneInformation. This is a giant binary blob data structure that breaks down as follows (changed values are bold).

4 bytes, LONG Bias, (2c,01,00,00)
64 bytes, WCHAR StandardName[32]
(45,00,61,00,73,00,74,00,65,00,72,00,6e,00,20,00,
53,00,74,00,61,00,6e,00,64,00,61,00,72,00,64,00,
20,00,54,00,69,00,6d,00,65,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00)
2 bytes, WORD wYear, (00,00)
2 bytes, WORD wMonth, (0b,00)
2 bytes, WORD wDayOfWeek, (00,00)
2 bytes, WORD wDay, (01,00)
2 bytes, WORD wHour, (02,00)
2 bytes, WORD wMinute, (00,00)
2 bytes, WORD wSecond, (00,00)
2 bytes, WORD wMilliseconds, (00,00)
4 bytes, LONG StandardBias, (00,00,00,00)
64 bytes, WCHAR DaylightName[32]
(45,00,61,00,73,00,74,00,65,00,72,00,6e,00,20,00,
44,00,61,00,79,00,6c,00,69,00,67,00,68,00,74,00,
20,00,54,00,69,00,6d,00,65,00,00,00,00,00,00,00,
00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,)
2 bytes, WORD wYear, (00,00)
2 bytes, WORD wMonth, (03,00)
2 bytes, WORD wDayOfWeek, (00,00)
2 bytes, WORD wDay, (02,00)
2 bytes, WORD wHour, (02,00)
 2 bytes, WORD wMinute, (00,00)
 2 bytes, WORD wSecond, (00,00)
 2 bytes, WORD wMilliseconds, (00,00)
 4 bytes, LONG DaylightBias; (c4,ff,ff,ff)

In the registry editor the changed values look like this:dstedit-1

Technical details from MSDN Windows Embedded Developer Center for Microsoft Windows CE 3.0:
GetTimeZoneInformation (Windows CE 3.0)
SetTimeZoneInformation (Windows CE 3.0)
SYSTEMTIME (Windows CE 3.0)
TIME_ZONE_INFORMATION (Windows CE 3.0)