您好,登錄后才能下訂單哦!
這篇文章主要介紹“Go中怎么處理時間數據”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Go中怎么處理時間數據”文章能幫助大家解決問題。
這可能是軟件包中最常用的方法。我們如何知道當前的時間呢?像這樣:
t := time.Now() fmt.Println(t)
輸出:
2023-04-16 23:54:45.924965 +0800 CST m=+0.000152293
這就是當前的時間。這是很麻煩的,所以我將把它分解成幾個部分。
2023-02-06
:年月日。
23:01:48.9983151
:時、分、秒
0800
:與 GMT 的時差。
CST:您所在的當前時區。
m=+0.000152293
: 單調時鐘讀數。
我們將在本文后面介紹單調時鐘。 我們現在可以繼續前進。
你打賭。
t := time.Now() fmt.Println(t.Year()) fmt.Println(t.Month()) fmt.Println(t.Day()) fmt.Println(t.Date()) fmt.Println(t.Hour()) fmt.Println(t.Minute()) fmt.Println(t.Second())
輸出:
2023
April
17
2023 April 17
0
3
31
以下是如何提取時間的每個元素。 很簡單,對吧?
我們如何以更漂亮的格式打印它?
fmt.Printf("%d %d %d\n", t.Year(), t.Month(), t.Day())
輸出:
2023 4 17
您可以看到我們如何使用 fmt.Printf
函數來根據自己的喜好格式化時間。
但是如果我們想用名字顯示月份,比如二月而不是 2 怎么辦? 如果我們想以 12 小時制而不是 24 小時制顯示時間怎么辦? 你可以看到它是如何很快變得復雜的。
幸運的是,我們有 time.Format
函數來幫助我們。 讓我們看看它是如何工作的。
fmt.Println(t.Format("Mon Jan 2 15:04:05 2006 MST")) fmt.Println(t.Format("Mon Jan 2 15:04:05")) fmt.Println(t.Format("2006/01/02")) fmt.Println(t.Format("3:04PM")) fmt.Println(t.Format("15:04PM"))
輸出:
Mon Apr 17 00:06:21 2023 CST
Mon Apr 17 00:06:21
2023/04/17
12:06AM
00:06AM
我認為這是我剛開始學習這個主題時最讓我失望的部分。 這也是您可以看到語言設計者有多么厚顏無恥的部分。
我們可以看到 time.Format 接受一個字符串,該字符串表示我們希望時間采用的格式。這是奇怪的部分,因為 Go 對格式字符串的格式非常非常講究。
Mon Apr 17 00:06:21 2023 CST
格式字符串必須是該字符串的變體,否則代碼會打印出奇怪的時間。 有趣的是,如果排除 Mon,格式字符串的每個元素都代表一個整數。 Jan 是 1,2 是 2,15 是 3。
1 2 3 4 5 6 -7
不過,從上面的代碼中,您可以看到我們如何按照我們想要的方式格式化我們的時間。 而且我們不必編寫額外的函數來將小時轉換為 12 或 24 小時制,或者將每個整數映射到月份。
您也可以使用預定義的格式,如下所示:
fmt.Println(time.UnixDate) fmt.Println(time.RFC3339)
輸出:
Mon Jan _2 15:04:05 MST 2006
2006-01-02T15:04:05Z07:00
查看文檔以了解更多格式。
如上所示,系統會自動檢測時區。 但是,在某些情況下,您可能需要顯示不同時區的時間。
nt := time.Now() lt := time.Now().Local() ut := time.Now().UTC() fmt.Println(nt) fmt.Println(lt) fmt.Println(ut)
輸出:
2023-04-17 00:11:10.214751 +0800 CST m=+0.000135417
2023-04-17 00:11:10.214751 +0800 CST
2023-04-16 16:11:10.214751 +0000 UTC
Local() 獲取本地時區,這與 time.Now() 會自動檢測到的時間相同。 調用 UTC() 會將時區轉換為 UTC。
但是,如果我們需要更強大的東西怎么辦?
l, _ := time.LoadLocation("UTC") fmt.Printf("%s\n", nt.In(l)) l, _ = time.LoadLocation("Europe/London") fmt.Printf("%s\n", nt.In(l)) l, _ = time.LoadLocation("America/Los_Angeles") fmt.Printf("%s\n", nt.In(l)) l, _ = time.LoadLocation("Asia/Seoul") fmt.Printf("%s\n", nt.In(l))
輸出:
2023-04-16 16:12:00.918525 +0000 UTC
2023-04-16 17:12:00.918525 +0100 BST
2023-04-16 09:12:00.918525 -0700 PDT
2023-04-17 01:12:00.918525 +0900 KST
time.LoadLocation
將加載您選擇的語言環境。 您可以使用此結果通過傳入你的 time.In 來轉換您的時間。
在許多情況下,您將不得不讀入一個字符串。 通常,這些將是時間戳。 在這些時間戳字符串上使用時間庫的函數不是很好嗎?
默認情況下,時間庫適用于 time.Time 類型。 但是,我們可以使用 time.Parse 來解析這些時間戳字符串。
timestamp := "2023-02-06 23:49:01" ts, err := time.Parse("2006-01-02 15:04:05", timestamp) if err != nil { fmt.Println(err) } fmt.Println(ts)
輸出:
2023-02-06 23:49:01 +0000 UTC
您還可以使用上述 Format 方法格式化 ts。
讓我們回到這個話題。 這聽起來比實際情況要可怕得多。
您的計算機有一個計時時鐘。 很有可能這次相當不穩定。 有沒有過在去另一個國家旅行后你的時鐘慢了幾個小時的經歷? 是否曾經需要重新設置您的時鐘以使其與您的手表相匹配? 這個時鐘叫做掛鐘,很容易改變。
雖然掛鐘擅長報時,但不適合測量時間。 例如,看看這段代碼。
t1 := time.Now() fmt.Println(t1) time.Sleep(time.Second) t2 := time.Now() fmt.Println(time.Now()) fmt.Println(t2.Sub(t1))
輸出:
2023-04-17 00:15:32.65858 +0800 CST m=+0.000109168
2023-04-17 00:15:33.660121 +0800 CST m=+1.001672543
1.001563166s
上面的代碼測量了 t1 和 t2 之間經過的時間。 這看起來很明顯,因為我們在聲明 t2 之前等待了一秒鐘。 但是,如果我們以某種方式設法在該跨度內切換我們的操作系統時間設置呢? 如果我們將系統時鐘增加 4 小時,是否意味著 t1 和 t2 之間經過的時間為 4 小時 1 秒? 這是荒謬的!
這就是 Go 使用單調時鐘來測量時間的原因。 從打印出來的時間里的m值可以看出,時間差大約是一秒。 單調時鐘允許準確測量時間。
關于“Go中怎么處理時間數據”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。