将时间戳和时区转换为RFC3339格式



我像这样获取用户的时间戳

2015-05-28T17:00:00

和时区"America/Los_Angeles"现在我想把日期转换成

2015-05-28T17:00:00-07:00

这是可能的吗,请帮助我在这方面,如果你有任何链接,你可以分享

您可以使用ParseInLocation来解析特定位置的datetime

package main
import (
"fmt"
"time"
)
func main() {
loc, err := time.LoadLocation("America/Los_Angeles")
if err != nil {
panic(err)
}
// Note: without explicit zone, returns time in given location.
const shortForm = "2015-05-28T17:00:00"
t, err := time.ParseInLocation("2006-01-02T15:04:05", shortForm, loc)
if err != nil {
panic(err)
}
fmt.Println(t)
}

输出为:

2015-05-28 17:00:00 -0700 PDT

时区"在围棋中转化为time.Location。按名称加载位置:

loc, err := time.LoadLocation("America/Los_Angeles")

解析:

  • 将字符串解释为"那个位置的时间戳":

    t, err := time.ParseInLocation("2006-01-02T15:04:05", input, loc)
    
  • 将字符串解释为UTC";时间戳:

    t, err := time.Parse("2006-01-02T15:04:05", input)
    
  • 格式化:

根据RFC3339来格式化t:

fmt.Println(t.Format(time.RFC3339))

t自带时间。位置,您还可以将时间戳转换为您认为合适的时区:

fmt.Println(t.In(loc).Format(time.RFC3339))
fmt.Println(t.UTC().Format(time.RFC3339))

https://go.dev/play/p/g2BgfdYGxU_I