为何不使用UTC偏移量替代庞大的全球时区列表?
多时区SaaS应用:为何不直接用UTC偏移量替代IANA时区?
很多人开发支持多时区的SaaS应用(比如Golang项目)时,都会采用标准方案:数据库统一存储UTC时间,让用户从全球时区数据库的庞大列表中选择对应时区,Golang也有专门的包用于管理这些时区数据。
但为什么不直接用UTC偏移量呢?比如支持UTC+5、UTC-6这类格式,一个偏移量就能覆盖多个时区:
UTC+5对应的部分时区:
Asia/Ashgabat Asia/Aqtobe Asia/Atyrau Asia/Karachi Asia/Qyzylorda Asia/Tashkent Asia/Tbilisi Indian/Maldives Indian/Mauritius
UTC-6对应的部分时区:
America/Belize America/Costa_Rica America/El_Salvador America/Guatemala America/Honduras America/Managua America/Regina America/Swift_Current America/Tegucigalpa America/Chicago (美国中部时区) Pacific/Easter (复活岛时间) Canada/Central (加拿大中部时区)
用Golang实现UTC时间到指定偏移量时间的转换非常直观:
package main import ( "fmt" "time" ) // ConvertTime 将UTC时间转换为指定时区偏移的时间 func ConvertTime(t time.Time, offset int) time.Time { return t.Add(time.Duration(offset) * time.Hour) } func main() { // 数据库中存储的UTC时间戳 dbTime := time.Now().UTC() // 用户的时区偏移(小时为单位,例如UTC+5传入5,UTC-6传入-6) userOffset := -6 // 转换为用户时区的时间 userTime := ConvertTime(dbTime, userOffset) // 输出用户时区的时间格式 fmt.Printf("用户时区时间戳: %s\n", userTime.Format(time.RFC3339)) }
内容的提问来源于stack exchange,提问作者uberrebu
相关产品推荐
相关产品推荐

