nodatime

Can't generate NodaZoneData file using NodaTime.TzdbCompiler


When I attempt to generate a NodaZoneData file using the NodaTime.TzdbCompiler and the latest IANA tzdb download, I receive the following output:

Starting compilation of directory data\2014f
Parsing file africa . . .
Parsing file antarctica . . .
Parsing file asia . . .
Parsing file australasia . . .
Parsing file backward . . .
Parsing file etcetera . . .
Parsing file europe . . .
Parsing file northamerica . . .
Parsing file pacificnew . . .
Parsing file southamerica . . .
Parsing file systemv . . .
Parsing file zone1970.tab . . .

Unhandled Exception: System.IO.InvalidDataException:
Unexpected zone database keyword: AD at ModaTime.TzdbCompiler.Tzdb.TzdbZoneInfoParser.ParseLine(String line, TzdbDatabase database)

The compiler appears to stop on the file zone1970.tab. If I remove that file. I can compile a NodaZoneData file without errors.


Solution

  • Yes, this is due to zone1970.tab only being introduced in 2014f, and the released TzdbCompiler not knowing about it. Delete the file, and you should be fine - or you can just use the nzd file we've already put up on the web site.

    If you're brave enough to fetch the 2.0 codebase, TzdbCompiler has been fixed to expect zone1970.tab - and we've got an issue tracking the fact that we should support it properly at some point.

    If you want to patch your local copy instead, revision 707440a3 is the change that fixes it in 2.0. Basically you just need to add that file to the list of ones that TzdbCompiler ignores.