go学习笔记(5)

今天在学习golang的时候,发现golang 在时间方面这块会有很多陷阱。继续在后端学习方面请教同事。先把今天遇到的问题记录下来,以作备日后用。

问题一:数据库mysql 的datetime 插入时区有误差?

起初不留意这个问题,查询了很久一直没发现问题。后来发现数据库链接时间没有加时区。但为什么需要加?先不管那么多,先把时区加上去。

加了时区 parseTime=true&loc=Local

db, err := sql.Open("mysql", "root:@tcp(127.0.0.1:3306)/fangtang?charset=utf8&parseTime=true&loc=Local")

数据库插入的时候,datetime的类型就可以和时区保持一致。问题好像解决了。

问题二,不加时区行不行?为什么time.Now 打印出来是对的,插入的时候不对

同事做了一次实验处理。在数据库插入的时候,将时间格式化一次,可以顺利插入mysql里面去。时区没有问题。datetime的字段可以接收字符串形式。

  now := time.Now().Format("2006-01-02 15:04:05")
  fmt.Println("SH : ",now)// 2018-05-31 22:58:13

出现问题的做法,直接将time的结构体插入到数据库,出现的现象是mysql的datetime字段插入的时间会有8个小时差别。解决方法先采取了format时间再直接插入数据库。

另外一种做法是将时区额外补上。但这种做法不如对mysql链接加上 parseTime=true&loc=Local” 两个变量快捷。

其他问题记录

今天记录一下几个有意思的地方。
格式化用到时间点:2006-01-02 15:04:05 // 记忆方法612345,谷歌go的创世日,挺有意思。

now.Format(“2006-01-02 15:04:05”)

精确到毫秒时候,还需要对此日期动刀一下,调整 。2006-01-02 15:04:05.000

    now := time.Now()
    //now.Format("2006-01-02 15:04:05")
    var zone= time.FixedZone("CST", 8*3600) 
    //var cstSh, _ = time.LoadLocation("Asia/Shanghai")
   now.In(zone) //修正时区问题

接触time 后, 还有UTC 和 UTC 这些需要注意区别。time里面还有隐藏很多方法,还需要继续接触。

package main
import (
    "fmt"
     "time"
)

func main(){
  now := time.Now().Format("2006-01-02 15:04:05") //格式化时间
  curtime := time.Now() //本地时间
  fmt.Println(curtime) 
  fmt.Println( time.Now().Unix()) //时间戳
  fmt.Println("SH : ",now)
}

总的来讲,golang 还是比较难学一门语言。 后面还要学好多关于后端的方面知识。对一直学前端的人来讲,这块是很需要耐性。

你可能感兴趣的:(go)