Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@
build
*.o
example
test/test
8 changes: 7 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
CC=gcc
CFLAGS=-I.
CFLAGS=-I. -std=gnu2x -Wall -Wextra -Werror
DEPS = zones.h

UTZ_DATA_DIR = vendor/tzdata
Expand Down Expand Up @@ -35,3 +35,9 @@ example/example: utz.o zones.o examples/example.o

clean:
rm -f zones.h zones.c whitelist.txt utz.o zones.o examples/example.o example

test: test/test
./test/test

test/test: utz.o zones.o test/test.o
$(CC) $(CFLAGS) -o $@ $^ -I.
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,18 @@ packing all possible syntax of the source IANA tz database.
Instead a subset corresponding to the what is needed to correctly parse
most zones is implemented.

## Updating timezone database

1. Install python requirements:
`pip3 install -r requirements.txt`
2. If necessary, update vendor files in vendor/android, vendor/wikipedia, and vendor/tzdata
3. Compile timezone links. To do that you need a [GeoNames](https://www.geonames.org/) username:
`./utils/compile_tzlinks.py -u <username>`
4. Compile whitelisted timezones from the Android file:
`./utils/compile_whitelist.py`
5. Finally, generate the database:
`./utils/generate_zones.py -d vendor/tzdata -w whitelist.txt -i majormetros`

## Links

[zic man page and IANA tz database format documentation](https://linux.die.net/man/8/zic)
Expand Down
17 changes: 9 additions & 8 deletions examples/example.c
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,23 @@
#include "zones.h"

#include <stdio.h>
void main() {
printf("Total library db size: %d B\n", sizeof(zone_rules) + sizeof(zone_abrevs) + sizeof(zone_defns) + sizeof(zone_names));
int main() {
printf("Total library db size: %d B\n", sizeof(utz_zone_rules) + sizeof(utz_zone_abrevs) + sizeof(utz_zone_defns) + sizeof(utz_zone_names));

udatetime_t dt = {0};
dt.date.year = 17;
utz_datetime_t dt = {0};
dt.date.year = 2017;
dt.date.month = 9;
dt.date.dayofmonth = 26;
dt.time.hour = 1;
dt.time.minute = 0;
dt.time.second = 0;

uzone_t active_zone;
get_zone_by_name("San Francisco", &active_zone);
uoffset_t offset;
char c = get_current_offset(&active_zone, &dt, &offset);
utz_zone_t active_zone;
utz_get_zone_by_name("San Francisco", &active_zone);
utz_offset_t offset;
char c = utz_get_current_offset(&active_zone, &dt, &offset);
printf("%s, current offset: %d.%d\n", active_zone.name, offset.hours, offset.minutes / 60);
printf(active_zone.abrev_formatter, c);
printf("\n");
return 0;
}
8 changes: 5 additions & 3 deletions majormetros
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,19 @@ Link Asia/Kolkata Asia/Delhi
Link Asia/Kolkata Asia/Mumbai
Link Asia/Tokyo Asia/Osaka
Link Asia/Shanghai Asia/Wuhan
Link Asia/Chongqing Asia/Chengdu
Link Asia/Shanghai Asia/Chengdu
Link Asia/Shanghai Asia/Chongqing
Link Asia/Shanghai Asia/Tianjin
Link Asia/Shanghai Asia/Hangzhou
Link Asia/Chongqing Asia/Xi'an
Link Asia/Shanghai Asia/Xi'an
Link Asia/Shanghai Asia/Changzhou
Link America/Sao_Paulo America/Rio_de_Janeiro
Link Asia/Shanghai Asia/Shantou
Link Asia/Shanghai Asia/Nanjing
Link Europe/Berlin Europe/Rhine-Ruhr
Link Asia/Shanghai Asia/Jinan
Link Asia/Kolkata Asia/Bangalore
Link Asia/Shanghai Asia/Harbin
Link Asia/Karachi Asia/Lahore
Link Asia/Shanghai Asia/Zhengzhou
Link Asia/Shanghai Asia/Qingdao
Expand All @@ -24,7 +27,6 @@ Link Asia/Kolkata Asia/Hyderabad
Link Asia/Shanghai Asia/Shenyang
Link Asia/Shanghai Asia/Wenzhou
Link Asia/Shanghai Asia/Nanchang
Link America/Chicago America/DallasFort_Worth
Link America/Chicago America/Houston
Link Asia/Kolkata Asia/Ahmedabad
Link America/New_York America/Washington,_D.C.
Expand Down
17 changes: 13 additions & 4 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,13 @@
BeautifulSoup
click
geopy
tzwhere
appdirs==1.4.4
beautifulsoup4==4.14.3
click==8.3.1
fissix==24.4.24
geographiclib==2.1
geopy==2.4.1
modernize==0.8.0
numpy==2.4.1
pytz==2025.2
shapely==2.1.2
soupsieve==2.8.3
typing_extensions==4.15.0
tzwhere==3.0.3
Loading