TommySzalapski
asked on
Parsing time zone database
We have time zone objects in our code that we fill from a time zone file that we maintain manually. This is silly because there is a nice one (Olson's) that already exists on Linux and in glibc so it should be readily available to our compiler.
What I'm trying to do is parse through the time zone database to fill our time zone structures. I'm having trouble figuring out the best way to do this. I don't really want to parse the entire file and match all the current rules to the current time zone definitions etc. I only care about the current rules. I assume there is a better way to do this than starting from scratch with the tz database text files. I'm trying to produce something like this for all of them:
What I'm trying to do is parse through the time zone database to fill our time zone structures. I'm having trouble figuring out the best way to do this. I don't really want to parse the entire file and match all the current rules to the current time zone definitions etc. I only care about the current rules. I assume there is a better way to do this than starting from scratch with the tz database text files. I'm trying to produce something like this for all of them:
Zone name offset DST? dst_mo dst_day dst_hr std_mo std_day std_hr
UTC 0:00 0
America/New_York -5:00 1 3 Sun>=8 2 11 Sun>=1 2
Europe/Paris +1:00 1 3 lastSun 1 10 lastSun 1
Isn't there some good way to call into time.h or something to get this? I can't seem to find one.
ASKER
I don't need to attach them, they are publicly available and already on your computer (even in you use MS which it appears you do, although I think they hide it somewhat).
IANA officially maintains them.
http://www.iana.org/time-zones
I use Linux (note the zones) so MS and C# don't really help.
Again. I certainly could write a parser for the files, but since they are built into GCC, surely there is a better way.
IANA officially maintains them.
http://www.iana.org/time-zones
I use Linux (note the zones) so MS and C# don't really help.
Again. I certainly could write a parser for the files, but since they are built into GCC, surely there is a better way.
Ooops - mybe I was not fully awake when reading the question. Sorry.
Have you checked out the ressouce links there ?
http://www.iana.org/time-zones/repository/tz-link.html
I've just read over them, but it looks like there's some useful code there ...
Have you checked out the ressouce links there ?
http://www.iana.org/time-zones/repository/tz-link.html
I've just read over them, but it looks like there's some useful code there ...
ASKER
But if all of that data is already built into glibc, then why should I be reinventing the wheel and writing a parser for a flat text file?
OK - I reverse my thought about parsing ... just use the already invented wheel and utilize the routines/classes in glibc (I've not looked over those routines, but I bet they're an equal replacement for the C#/VC classes I've mentioned while being on the Windows rail ...).
While thinking abut, how about that: The files from the IANA site (the TZ database) contains a makfile to generate binary tz files, which I presume glibc reads.
How about just adding creating some kind of addendum with your own time zone to one of the original tz files and appending it to the dl'd file automatically when new IANA files are available. When you subsequently compile the files with the IANA makefile to get the binary tz files, there should not be much in the way to use them and have your own tz available with the glibc stuff ?
While thinking abut, how about that: The files from the IANA site (the TZ database) contains a makfile to generate binary tz files, which I presume glibc reads.
How about just adding creating some kind of addendum with your own time zone to one of the original tz files and appending it to the dl'd file automatically when new IANA files are available. When you subsequently compile the files with the IANA makefile to get the binary tz files, there should not be much in the way to use them and have your own tz available with the glibc stuff ?
ASKER
Hmm... still not quite awake yet? :)
I'm not trying to add new timezones, I'm trying to get the ones that are already in glibc and put them into our structures.
Anyway, I tried to find what I needed in time.h and other files but had no success.
I suppose I could parse the binary files which would be a bit easier, but I'd prefer library calls.
I'm not trying to add new timezones, I'm trying to get the ones that are already in glibc and put them into our structures.
Anyway, I tried to find what I needed in time.h and other files but had no success.
I suppose I could parse the binary files which would be a bit easier, but I'd prefer library calls.
SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
The IANA also publishes a library that you can link with to get the data. I haven't really messed with it, but you can get to it here: http://www.iana.org/time-zones
ASKER
I think I found the best solution for my needs. As a side note, boost's timezone stuff is a bit more fleshed out than the time.h stuff. Anyone reading this in the future might want to look there: http://www.boost.org/doc/libs/1_54_0/doc/html/date_time.html
Could you attach one of these files ?
Other idea: Maybe there's something useful in the TimeZoneInfo class (MS C#/C++) ?