50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package main
|
||
|
||
import (
|
||
"fmt"
|
||
"log"
|
||
"time"
|
||
)
|
||
|
||
func TzStrToOffset(ianaZone string) (string, error) {
|
||
loc, err := time.LoadLocation(ianaZone)
|
||
if err != nil {
|
||
return "", fmt.Errorf("无法加载时区 %s: %v", ianaZone, err)
|
||
}
|
||
|
||
t := time.Date(2025, time.October, 28, 0, 0, 0, 0, loc)
|
||
|
||
_, offsetSeconds := t.Zone()
|
||
|
||
offset := time.Duration(offsetSeconds) * time.Second
|
||
|
||
// 格式化偏移量。time.Time.Format() 无法直接将 Location 格式化成 UTC+HH:MM,
|
||
// 因此我们需要手动计算并格式化。
|
||
sign := "+"
|
||
if offsetSeconds < 0 {
|
||
sign = "-"
|
||
offset = -offset // 确保偏移量为正值进行计算
|
||
}
|
||
|
||
hours := int(offset.Hours())
|
||
minutes := int(offset.Minutes()) % 60
|
||
|
||
// 最终的格式化字符串
|
||
utcOffsetString := fmt.Sprintf("%s%02d%02d", sign, hours, minutes)
|
||
|
||
return utcOffsetString, nil
|
||
}
|
||
|
||
func main() {
|
||
ianaZone := "Asia/Shanghai"
|
||
ianaZone = "UTC"
|
||
|
||
utcOffsetString, err := TzStrToOffset(ianaZone)
|
||
if err != nil {
|
||
log.Fatalf("错误: %v", err)
|
||
}
|
||
|
||
fmt.Printf("IANA 时区: %s\n", ianaZone)
|
||
fmt.Printf("UTC 偏移量: %s\n", utcOffsetString)
|
||
}
|