Awesome
Zig TZif
This repository implements TZif parsing, according to RFC 8536.
Usage
Take a look at the examples to get an idea of this library works. I recommend starting with the localtime example.
Add it as a package
To start, add zig-tzif to your build.zig.zon
:
.{
.name = "your-project",
.version = "0.1.0",
.dependencies = .{
.tzif = .{
.url = "https://github.com/leroycep/zig-tzif/archive/fdac55aa9b4a59b5b0dcba20866b6943fc00765d.tar.gz",
.hash = "1220459c1522d67e7541b3500518c9db7d380aaa962d433e6704d87a21b643502e69",
},
},
}
Then, add zig-tzif
to executable (or library) in the build.zig
:
const Build = @import("std").Build;
pub fn build(b: *Build) void {
const target = b.standardTargetOptions(.{});
const optimize = b.standardOptimizeOption(.{});
// Get the tzif dependency
const tzif = b.dependency("tzif", .{
.target = target,
.optimize = optimize,
});
const exe = b.addExecutable(.{
.name = "tzif",
.root_source_file = .{ .path = "tzif.zig" },
.target = target,
.optimize = optimize,
});
// Add it as a module
exe.addModule("tzif", tzif.module("tzif"));
b.installArtifact(exe);
}
Useful functions
tzif.parseFile(allocator, filename) !TimeZone
tzif.parse(allocator, reader, seekableStream) !TimeZone
TimeZone.localTimeFromUTC(this, utc_timestamp) ?ConversionResult
Caveats
- This library has not been rigorously tested, it might not always produce the correct offset, especially for time zones that have changed between different Daylight Savings schemes.
- Does not support version 1 files. Files must be version 2 or 3.