TZF is a fast timezone finder package designed for Go. It allows you to quickly find the timezone for a given latitude and longitude, making it ideal for geo queries and services such as weather forecast APIs. With optimized performance and two different data options, TZF is a powerful tool for any Go developer's toolkit.
Note
Here are some language or server which built with tzf or it's other language bindings:
Language or Sever | Link | Note |
---|---|---|
Go | Alfex4936/tzf |
|
Ruby | HarlemSquirrel/tzf-rb |
|
Rust | ringsaturn/tzf-rs |
|
Python | ringsaturn/tzfpy |
|
HTTP API | ringsaturn/tzf-server |
build with tzf |
HTTP API | racemap/rust-tz-service |
build with tzf-rs |
Redis Server | ringsaturn/tzf-server |
build with tzf |
Redis Server | ringsaturn/redizone |
build with tzf-rs |
To start using TZF in your Go project, you first need to install the package:
go get github.com/Alfex4936/tzf
Then, you can use the following code to locate:
// Use about 150MB memory for init, and 60MB after GC.
package main
import (
"fmt"
"github.com/Alfex4936/tzf"
)
func main() {
finder, err := tzf.NewDefaultFinder()
if err != nil {
panic(err)
}
fmt.Println(finder.GetTimezoneName(116.6386, 40.0786))
}
If you require a query result that is 100% accurate, use the following to locate:
// Use about 900MB memory for init, and 660MB after GC.
package main
import (
"fmt"
"github.com/Alfex4936/tzf"
tzfrel "github.com/ringsaturn/tzf-rel"
"github.com/Alfex4936/tzf/pb"
"google.golang.org/protobuf/proto"
)
func main() {
input := &pb.Timezones{}
// Full data, about 83.5MB
dataFile := tzfrel.FullData
if err := proto.Unmarshal(dataFile, input); err != nil {
panic(err)
}
finder, _ := tzf.NewFinderFromPB(input)
fmt.Println(finder.GetTimezoneName(116.6386, 40.0786))
}
It's expensive to init tzf's Finder/FuzzyFinder/DefaultFinder, please consider reuse it or as a global var. Below is a global var example:
package main
import (
"fmt"
"github.com/Alfex4936/tzf"
)
var f tzf.F
func init() {
var err error
f, err = tzf.NewDefaultFinder()
if err != nil {
panic(err)
}
}
func main() {
fmt.Println(f.GetTimezoneName(116.3883, 39.9289))
fmt.Println(f.GetTimezoneName(-73.935242, 40.730610))
}
In addition to using TZF as a library in your Go projects, you can also use the tzf command-line interface (CLI) tool to quickly get the timezone name for a set of coordinates. To use the CLI tool, you first need to install it using the following command:
go install github.com/Alfex4936/tzf/cmd/tzf@latest
Once installed, you can use the tzf command followed by the latitude and longitude values to get the timezone name:
tzf -lng 116.3883 -lat 39.9289