溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

golang字符串轉(zhuǎn)Time類型問題怎么解決

發(fā)布時間:2023-04-18 16:39:22 來源:億速云 閱讀:98 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“golang字符串轉(zhuǎn)Time類型問題怎么解決”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“golang字符串轉(zhuǎn)Time類型問題怎么解決”文章能幫助大家解決問題。

最近在做項目中,遇到了golang 字符串轉(zhuǎn)Time類型的問題。調(diào)研后發(fā)現(xiàn)golang 提供了倆種方式,即time.Parse 跟 time.ParseInLocation。倆種方式 差距很大,用不好小心踩坑。

先上代碼:

golang字符串轉(zhuǎn)Time類型問題怎么解決

 結(jié)果:

golang字符串轉(zhuǎn)Time類型問題怎么解決

 不難發(fā)現(xiàn),倆種方式轉(zhuǎn)換后的時間戳是不一樣的。結(jié)果是差了8個小時。導(dǎo)致這個的原因就是時區(qū)的問題。

看下倆個函數(shù)的作用:

  • time.Parse 把時間字符串轉(zhuǎn)換為Time,時區(qū)是UTC時區(qū)。

  • time.ParseInLocation可以根據(jù)時間字符串和指定時區(qū)轉(zhuǎn)換Time。

所以,我們應(yīng)該用time.ParseInLocation進行轉(zhuǎn)換,同時指定時區(qū)為本地時間。

時區(qū)

這里順便在回憶下時區(qū)的關(guān)系。

整個地球分為二十四時區(qū),每個時區(qū)都有自己的本地時間。在國際無線電通信場合,為了統(tǒng)一起見,使用一個統(tǒng)一的時間,稱為通用協(xié)調(diào)時(UTC, Universal Time Coordinated)。UTC與格林尼治平均時(GMT, Greenwich Mean Time)一樣,都與英國倫敦的本地時相同。在本文中,UTC與GMT含義完全相同。
北京時區(qū)(CST)是東八區(qū),領(lǐng)先UTC八個小時

關(guān)系:

UTC=GMT

CST=UTC/GMT +8 小時

時間字符串和時間戳的相互轉(zhuǎn)換

package main

import (
	"log"
	"time"
)

func main() {
	t := int64(1546926630)      //外部傳入的時間戳(秒為單位),必須為int64類型
	t1 := "2019-01-08 13:50:30" //外部傳入的時間字符串

	//時間轉(zhuǎn)換的模板,golang里面只能是 "2006-01-02 15:04:05" (go的誕生時間)
	timeTemplate1 := "2006-01-02 15:04:05" //常規(guī)類型
	timeTemplate2 := "2006/01/02 15:04:05" //其他類型
	timeTemplate3 := "2006-01-02"          //其他類型
	timeTemplate4 := "15:04:05"            //其他類型

	// ======= 將時間戳格式化為日期字符串 =======
	log.Println(time.Unix(t, 0).Format(timeTemplate1)) //輸出:2019-01-08 13:50:30
	log.Println(time.Unix(t, 0).Format(timeTemplate2)) //輸出:2019/01/08 13:50:30
	log.Println(time.Unix(t, 0).Format(timeTemplate3)) //輸出:2019-01-08
	log.Println(time.Unix(t, 0).Format(timeTemplate4)) //輸出:13:50:30

	// ======= 將時間字符串轉(zhuǎn)換為時間戳 =======
	stamp, _ := time.ParseInLocation(timeTemplate1, t1, time.Local) //使用parseInLocation將字符串格式化返回本地時區(qū)時間
	log.Println(stamp.Unix())  //輸出:1546926630
}

關(guān)于“golang字符串轉(zhuǎn)Time類型問題怎么解決”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI