Fork me on GitHub

golang将时间转为时间戳碰到的问题

golang将字符串"2024-03-07 16:00:00"转为时间戳

代码如下:

package main  
  
import (  
    "fmt"  
    "time"  
)  
  
func main() {  
    // 定义时间格式,与字符串中的时间格式匹配  
    const layout = "2006-01-02 15:04:05"  
      
    // 要转换的时间字符串  
    str := "2024-03-07 16:00:00"  
      
    // 解析时间字符串  
  t, err := time.ParseInLocation(layout, str, time.UTC)
  if err != nil {  
        panic(err) // 如果解析出错,则抛出panic  
    }  
      
    // 转换为Unix时间戳(秒)  
    timestamp := t.Unix()  
      
    // 打印时间戳  
    fmt.Println(timestamp)  
}

在这个例子中,layout常量定义了时间的格式,它必须与字符串"2024-03-07 19:00:00"的格式相匹配。time.Parse函数用于解析这个时间字符串,并返回一个time.Time类型的值。然后,t.Unix()方法将这个time.Time值转换为Unix时间戳(秒为单位)。

如果字符串中的时间是本地时间,并且你想要获得UTC时间戳,你应该先调用t.UTC(),然后再调用Unix()方法。但是,如果字符串中的时间已经是UTC时间,那么你可以直接调用t.Unix()而不需要额外的转换。在这个例子中,没有提及字符串时间是本地时间还是UTC时间,所以我们假设它代表的就是给定的时间点,不进行任何时区转换。如果需要转换,可以在解析之后根据具体情况添加时区转换的逻辑。

但是!!!最终输出了:1709913600

比实际的:1709884800多了八个小时,问题:在解析时间字符串,(time.ParseInLocation)的时候不应该使用time.UTC,应该使用time.Local

最终代码:

 

package main  
  
import (  
    "fmt"  
    "time"  
)  
  
func main() {  
    // 定义时间格式,与字符串中的时间格式匹配  
    const layout = "2006-01-02 15:04:05"  
      
    // 要转换的时间字符串  
    str := "2024-03-07 16:00:00"  
      
    // 解析时间字符串  
  t, err := time.ParseInLocation(layout, str, time.Local)
  if err != nil {  
        panic(err) // 如果解析出错,则抛出panic  
    }  
      
    // 转换为Unix时间戳(秒)  
    timestamp := t.Unix()  
      
    // 打印时间戳  
    fmt.Println(timestamp)  
}

 

输出正确!

 

posted @ 2024-03-08 18:24  君乐豹  阅读(78)  评论(0编辑  收藏  举报
Live2D