はじめる
はじめる
Project tzf は経度・緯度からタイムゾーンを検索するための多言語サポートを提供します。
| 言語 / サービス | リポジトリ | API ドキュメント |
|---|---|---|
| Go | ringsaturn/tzf | |
| Rust | ringsaturn/tzf-rs | |
| Python | ringsaturn/tzfpy | tzfpy.pyi |
| Swift | ringsaturn/tzf-swift | |
| Ruby | HarlemSquirrel/tzf-rb | |
| JS (ブラウザ Wasm) | ringsaturn/tzf-wasm | |
| HTTP API | racemap/rust-tz-service | |
| オンラインデモ | ringsaturn/tzf-web |
Go
go get github.com/ringsaturn/tzf// 初期化に約 150MB のメモリを使用し、GC 後は約 60MB。
package main
import (
"fmt"
"github.com/ringsaturn/tzf"
)
func main() {
finder, err := tzf.NewDefaultFinder()
if err != nil {
panic(err)
}
fmt.Println(finder.GetTimezoneName(116.6386, 40.0786))
}100% 正確な結果が必要な場合は NewFullFinder を使用します(必ず再利用してください——初期化コストが高いです):
package main
import (
"fmt"
"github.com/ringsaturn/tzf"
)
func main() {
finder, err := tzf.NewFullFinder()
if err != nil {
panic(err)
}
fmt.Println(finder.GetTimezoneName(139.6917, 35.6895))
}Rust
cargo add tzf-rsuse lazy_static::lazy_static;
use tzf_rs::DefaultFinder;
lazy_static! {
static ref FINDER: DefaultFinder = DefaultFinder::new();
}
fn main() {
// 座標は (経度,緯度) の順です。
print!("{:?}\n", FINDER.get_tz_name(116.3883, 39.9289));
print!("{:?}\n", FINDER.get_tz_names(116.3883, 39.9289));
}完全精度サポート (v1.3.0+)
v1.3.0 以降、オプションの Cargo feature で完全精度データを利用できます。 完全データセット(約 17 MB)は crates.io のサイズ制限を超えるため、 git 依存関係で参照する必要があります:
[dependencies]
tzf-rs = { git = "https://github.com/ringsaturn/tzf-rs", tag = "v{X}.{Y}.{Z}", features = ["full"], default-features = false }use tzf_rs::DefaultFinder;
fn main() {
let finder = DefaultFinder::new_full();
let tz_name = finder.get_tz_name(139.767125, 35.681236);
println!("tz_name: {}", tz_name);
}Python
# tzfpy のみインストール
pip install tzfpy
# pytz サポート付きでインストール
pip install "tzfpy[pytz]"
# tzdata サポート付きでインストール
pip install "tzfpy[tzdata]"
# conda でインストール
conda install -c conda-forge tzfpy>>> from tzfpy import get_tz, get_tzs
>>> get_tz(116.3883, 39.9289) # (経度,緯度) の順
'Asia/Shanghai'
>>> get_tzs(87.4160, 44.0400) # 一致するすべてのタイムゾーンを返す
['Asia/Shanghai', 'Asia/Urumqi']Python は完全精度モードをサポートしていません。
Swift
Package.swift にパッケージを追加します:
dependencies: [
.package(url: "https://github.com/ringsaturn/tzf-swift.git", from: "{latest_version}")
]import Foundation
import tzf
do {
let finder = try DefaultFinder()
let timezone = try finder.getTimezone(lng: 116.3833, lat: 39.9167)
print("北京のタイムゾーン:", timezone)
let timezones = try finder.getTimezones(lng: 87.5703, lat: 43.8146)
print("複数の候補タイムゾーン:", timezones)
print("データバージョン:", finder.dataVersion())
} catch {
print("エラー:", error)
}Ruby
Ruby サポートは HarlemSquirrel によって作成・保守されています。 詳細なドキュメントは tzf-rb を参照してください。
bundle add tzf
# または
gem install tzfrequire 'tzf'
TZF.tz_name(40.74771675713742, -73.99350390136448)
# => "America/New_York"
TZF.tz_names(40.74771675713742, -73.99350390136448)
# => ["America/New_York"]WebAssembly
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>tzf-wasm 例</title>
<script type="module">
import init, { WasmFinder } from "https://www.unpkg.com/tzf-wasm@v0.1.4/tzf_wasm.js";
async function loadWasm() {
await init();
const finder = new WasmFinder();
const timezone = finder.get_tz_name(-74.006, 40.7128);
console.log("ニューヨークのタイムゾーン:", timezone);
}
loadWasm();
</script>
</head>
<body></body>
</html>オンラインプレビュー:http://ringsaturn.github.io/tzf-web/
CLI
Go と Rust の両方の実装にコマンドラインツールが付属しています。
Go CLI
go install github.com/ringsaturn/tzf/cmd/tzf@latesttzf -lng 116.3883 -lat 39.9289
# stdin 経由のバッチ処理
echo -e "116.3883 39.9289\n116.3883, 39.9289" | tzf -stdin-order lng-latRust CLI
cargo install tzf-rstzf --lng 116.3883 --lat 39.9289
# stdin 経由のバッチ処理
echo -e "116.3883 39.9289\n116.3883, 39.9289" | tzf --stdin-order lng-latNixOS ユーザーは Nix 経由で tzf-rs をインストールできます——
詳細は NixOS packages を参照してください。
最終更新日