Time:Go語言的時間處理利器

閱讀時間約 10 分鐘


raw-image

👨‍💻簡介

要處理日期和時間,就必須知道這個Package -> time,Go提供了內建的timePackage。 今天主要介紹time的功能,包括時間操作、格式化等等,以及常見用法。

主要功能

timePackage的主要功能是處理時間和日期的操作,包括時間的表示、創建、格式化和計算。在Go中,時間通常以time.Time type表示,這個type包含了日期和時間的資訊。

導入Package

import "time"

創建時間

使用time.Now()函數來獲取當前的時間。

package main

import (
"fmt"
"time"
)
func main() {
currentTime := time.Now()
fmt.Println("Current Time:", currentTime)
}

你還可以使用time.Date()函數來創建一個特定日期和時間的time.Time 物件。

package main

import (
"fmt"
"time"
)
func main() {
specificTime := time.Date(2023, time.September, 15, 12, 0, 0, 0, time.UTC)
fmt.Println("Specific Time:", specificTime)
}

時間格式化

timePackage有提供許多方法來格式化時間為字串。可以使用Format方法和指定的時間格式來實現。

package main

import (
"fmt"
"time"
)
func main() {
currentTime := time.Now()
fmt.Println("Default Format:", currentTime)
fmt.Println("Custom Format:", currentTime.Format("2006-01-02 15:04:05"))
}

時間操作

對時間進行增減,如計算兩個時間的差距、增加時間、減少時間等。

package main

import (
"fmt"
"time"
)
func main() {
now := time.Now()
oneHourLater := now.Add(time.Hour)
fmt.Println("One Hour Later:", oneHourLater)

tenMinutesAgo := now.Add(-10 * time.Minute)
fmt.Println("Ten Minutes Ago:", tenMinutesAgo)

duration := oneHourLater.Sub(now)
fmt.Println("Time Difference:", duration)
}

定時器

timePackage還提供了定時器的功能,可以用來執行定時任務。

package main

import (
"fmt"
"time"
)
func main() {
ticker := time.NewTicker(2 * time.Second)
defer ticker.Stop()

for {
select {
case <-ticker.C:
fmt.Println("Tick at", time.Now())
}
}
}

Sleep

要讓程式暫停執行一段時間,可以使用time.Sleep函數。

package main

import (
"fmt"
"time"
)
func main() {
fmt.Println("Start")
time.Sleep(3 * time.Second)
fmt.Println("End after 3 seconds")
}

常見用法

時間比較

使用BeforeAfterEqual方法來比較兩個時間差。

package main

import (
"fmt"
"time"
)
func main() {
now := time.Now()
future := now.Add(time.Hour)

if future.After(now) {
fmt.Println("Future time is after current time")
}

past := now.Add(-time.Hour)

if past.Before(now) {
fmt.Println("Past time is before current time")
}

sameTime := now

if sameTime.Equal(now) {
fmt.Println("Same time as current time")
}
}

計算時間間隔

使用Sub方法計算兩個時間之間的時間間隔。

package main

import (
"fmt"
"time"
)
func main() {
start := time.Now()
time.Sleep(2 * time.Second)
end := time.Now()

duration := end.Sub(start)
fmt.Println("Time elapsed:", duration)
}

時間格式化與解析

將時間格式化為字串,也可以從字串解析出時間。

package main

import (
"fmt"
"time"
)
func main() {
// 格式化時間為字串
currentTime := time.Now()
fmt.Println("Default Format:", currentTime)
fmt.Println("Custom Format:", currentTime.Format("2006-01-02 15:04:05"))

// 從字串解析時間
timeStr := "2023-09-15 14:30:00"
parsedTime, _ := time.Parse("2006-01-02 15:04:05", timeStr)
fmt.Println("Parsed Time:", parsedTime)
}

定義自定義時區

使用time.LoadLocation來定義自定義的時區。

package main

import (
"fmt"
"time"
)
func main() {
// 定義自定義時區
taipei, _ := time.LoadLocation("Asia/Taipei")

// 在指定時區下獲取時間
twTime := time.Now().In(taipei)
fmt.Println("Taiwai Time:", twTime)
}

定時任務

使用time.Timer來執行定時任務,通常用來定時執行程式中的某些操作。

package main

import (
"fmt"
"time"
)
func main() {
timer1 := time.NewTimer(2 * time.Second)
<-timer1.C
fmt.Println("Timer 1 fired")

timer2 := time.NewTimer(time.Second)
go func() {
<-timer2.C
fmt.Println("Timer 2 fired")
}()
stop2 := timer2.Stop()
if stop2 {
fmt.Println("Timer 2 stopped")
}
}

📚參考資料

17會員
83內容數
golang
留言0
查看全部
發表第一個留言支持創作者!
Alan的開發者天地 的其他內容
👨‍💻簡介 要印出Hello World,就會碰到這個Package -> fmt,今天來簡單整理一下fmt的作用、格式化的控制與常見用法。
👨‍💻簡介 昨天講到Goroutine的橋梁aka傳話筒 — Channel,那要怎麼知道對方有收到訊息,我的紙條有送到對方手上呢? 今天就是要來介紹幾種Goroutine的確定完成工作的幾種方式。
👨‍💻簡介 昨天講到Goroutine有稍微簡單介紹Channel,Channel是Go語言中極為重要的併發通訊機制,它就像是不同goroutines之間的話筒,允許它們安全地傳遞資料和信息。這個強大的工具使得Go語言在處理併發任務時非常優雅和高效。
👨‍💻簡介 在日常生活中,如果能同時做很多事情,效率肯定大大提升,那麼在Go語言中,該如何做到呢,答案就是今天的主角Goroutine了,在Go語言中,讓併發變得簡單的強大工具,今天就是來給他一個快速介紹。
👨‍💻簡介 當我們在宣告變數時,電腦會為該變數在記憶體中分配一個位置,然後將這個變數值儲存在這個位置上,需要讀取或修改這個變數值時,電腦是透過記憶體位置來存取這個值。 今天來簡單介紹一下go的Pointer,他的特性以及常見用法。
👨‍💻簡介 在軟體開發中,錯誤無所不在。無論是網路請求失敗、檔案不存在,還是數學計算錯誤,處理錯誤是任何開發者的日常工作,系統的穩定度基本取決於對於錯誤處理是否全面,好的錯誤處理也可以產生適當的錯誤訊息,讓 Debug 更加容易。
👨‍💻簡介 要印出Hello World,就會碰到這個Package -> fmt,今天來簡單整理一下fmt的作用、格式化的控制與常見用法。
👨‍💻簡介 昨天講到Goroutine的橋梁aka傳話筒 — Channel,那要怎麼知道對方有收到訊息,我的紙條有送到對方手上呢? 今天就是要來介紹幾種Goroutine的確定完成工作的幾種方式。
👨‍💻簡介 昨天講到Goroutine有稍微簡單介紹Channel,Channel是Go語言中極為重要的併發通訊機制,它就像是不同goroutines之間的話筒,允許它們安全地傳遞資料和信息。這個強大的工具使得Go語言在處理併發任務時非常優雅和高效。
👨‍💻簡介 在日常生活中,如果能同時做很多事情,效率肯定大大提升,那麼在Go語言中,該如何做到呢,答案就是今天的主角Goroutine了,在Go語言中,讓併發變得簡單的強大工具,今天就是來給他一個快速介紹。
👨‍💻簡介 當我們在宣告變數時,電腦會為該變數在記憶體中分配一個位置,然後將這個變數值儲存在這個位置上,需要讀取或修改這個變數值時,電腦是透過記憶體位置來存取這個值。 今天來簡單介紹一下go的Pointer,他的特性以及常見用法。
👨‍💻簡介 在軟體開發中,錯誤無所不在。無論是網路請求失敗、檔案不存在,還是數學計算錯誤,處理錯誤是任何開發者的日常工作,系統的穩定度基本取決於對於錯誤處理是否全面,好的錯誤處理也可以產生適當的錯誤訊息,讓 Debug 更加容易。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
今天看到這張畫,想起一段為什麼傳世的美麗物件裡有股說不出的能量: 「看到牆上的毛毯了嗎?那可是很特別的毛毯,在阿撒巴斯卡文化裡,製作毛毯、寫歌,或任何的職業都帶有無上光榮。 你必須經過寫歌者的同意,才能詠唱他的歌,因為在他寫的歌曲中,蘊含著他的靈魂。如果你是編織毛毯的人,除非你知道你能活得夠久,
unaffected by time 不受時間影響,也說是經典或永恆。   時間是人最寶貴的資產,光陰一去不復返。把握時間,它能帶來複利效應,成為我們知識和財富的好朋友。日新月異的科技業卻總是要跟時間賽跑,摩爾定侓或每年新機發表,似乎一切也跟著科技迭代的速度在向前跑。 只是,生命還是時間要
Thumbnail
聽著Jay Fung跟Alex Fung合譜的R&B旋律,反反覆覆,應該向前望還是留戀從前?站在十字路口的Kerryta周子涵,躊躇著。
Thumbnail
台北捷運上的「每天為你讀一首詩」,給枯燥的通勤族帶來一絲浪漫的氣息。 先來讀讀這首可愛又悲傷的捷運小詩吧! 仙人掌  ◎小令 然後非常失望 像粉筆斷到不能再斷 像雨傘開花後驚慌失措 像時鐘難過到只想倒退走 告訴我 要如何拔掉你身上的刺而不讓你 落下任何一滴淚 讓時間倒退的期盼
Thumbnail
『It’s time to let go』冰人這句話,貫穿了我這陣子的核心。 捍衛戰士獨行俠,你也看了嗎? 要怎麼面對一段不知道什麼時候會結束又如何發展的關係? 道別時我能像開始一樣的,微笑揮手嗎?
Thumbnail
圖片來自 William Warby 一般來說,資料的備份策略從規模的小到大,我們可以有幾種選擇,如果只是小規模的、輕量的,通常是燒成備份光碟,操作方式也多是手動的,然而隨著年紀的增長  Orz,資料也跟著增長,當資料量大到某種規模,手動備份就變得沒效率且不實際,這時我們就需要專門的備份軟體來自動的
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
美國總統大選只剩下三天, 我們觀察一整週民調與金融市場的變化(包含賭局), 到本週五下午3:00前為止, 誰是美國總統幾乎大概可以猜到60-70%的機率, 本篇文章就是以大選結局為主軸來討論近期甚至到未來四年美股可能的改變
Thumbnail
Faker昨天真的太扯了,中國主播王多多點評的話更是精妙,分享給各位 王多多的點評 「Faker是我們的處境,他是LPL永遠繞不開的一個人和話題,所以我們特別渴望在決賽跟他相遇,去直面我們的處境。 我們曾經稱他為最高的山,最長的河,以為山海就是盡頭,可是Faker用他28歲的年齡...
Thumbnail
今天看到這張畫,想起一段為什麼傳世的美麗物件裡有股說不出的能量: 「看到牆上的毛毯了嗎?那可是很特別的毛毯,在阿撒巴斯卡文化裡,製作毛毯、寫歌,或任何的職業都帶有無上光榮。 你必須經過寫歌者的同意,才能詠唱他的歌,因為在他寫的歌曲中,蘊含著他的靈魂。如果你是編織毛毯的人,除非你知道你能活得夠久,
unaffected by time 不受時間影響,也說是經典或永恆。   時間是人最寶貴的資產,光陰一去不復返。把握時間,它能帶來複利效應,成為我們知識和財富的好朋友。日新月異的科技業卻總是要跟時間賽跑,摩爾定侓或每年新機發表,似乎一切也跟著科技迭代的速度在向前跑。 只是,生命還是時間要
Thumbnail
聽著Jay Fung跟Alex Fung合譜的R&B旋律,反反覆覆,應該向前望還是留戀從前?站在十字路口的Kerryta周子涵,躊躇著。
Thumbnail
台北捷運上的「每天為你讀一首詩」,給枯燥的通勤族帶來一絲浪漫的氣息。 先來讀讀這首可愛又悲傷的捷運小詩吧! 仙人掌  ◎小令 然後非常失望 像粉筆斷到不能再斷 像雨傘開花後驚慌失措 像時鐘難過到只想倒退走 告訴我 要如何拔掉你身上的刺而不讓你 落下任何一滴淚 讓時間倒退的期盼
Thumbnail
『It’s time to let go』冰人這句話,貫穿了我這陣子的核心。 捍衛戰士獨行俠,你也看了嗎? 要怎麼面對一段不知道什麼時候會結束又如何發展的關係? 道別時我能像開始一樣的,微笑揮手嗎?
Thumbnail
圖片來自 William Warby 一般來說,資料的備份策略從規模的小到大,我們可以有幾種選擇,如果只是小規模的、輕量的,通常是燒成備份光碟,操作方式也多是手動的,然而隨著年紀的增長  Orz,資料也跟著增長,當資料量大到某種規模,手動備份就變得沒效率且不實際,這時我們就需要專門的備份軟體來自動的