面试题答案
一键面试常见误区
- 忽略时区设置:默认情况下,
time.Format
使用本地时区,如果未考虑到这一点,在不同时区的机器上运行可能得到不同结果。例如,在纽约和北京运行同样代码格式化时间,结果的日期部分可能不同。 - 时区格式字符串错误:使用错误的时区格式字符串。如
Z
用于输出带正负号的时区偏移,若错误使用其他类似格式可能无法正确显示时区信息。 - 混淆UTC和本地时间:直接对UTC时间使用本地格式化规则,未进行时区转换。
正确处理方式
package main
import (
"fmt"
"time"
)
func main() {
// 获取当前时间
now := time.Now()
// 格式化本地时间
localFormat := now.Format("2006-01-02 15:04:05 MST")
fmt.Println("本地时间格式化:", localFormat)
// 获取UTC时间
utcTime := now.UTC()
// 格式化UTC时间
utcFormat := utcTime.Format("2006-01-02 15:04:05 UTC")
fmt.Println("UTC时间格式化:", utcFormat)
// 手动设置时区
loc, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
fmt.Println("加载时区失败:", err)
return
}
shanghaiTime := now.In(loc)
shanghaiFormat := shanghaiTime.Format("2006-01-02 15:04:05 Asia/Shanghai")
fmt.Println("上海时区时间格式化:", shanghaiFormat)
}
在这个示例中:
- 先获取本地时间并按本地时区格式化。
- 获取UTC时间并按UTC时区格式化。
- 通过
time.LoadLocation
加载指定时区,将时间转换到该时区后再格式化,避免了时区相关的误区。