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

更新於 2024/09/14閱讀時間約 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")
}
}

📚參考資料

avatar-img
17會員
83內容數
golang
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
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
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
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
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
今天看到這張畫,想起一段為什麼傳世的美麗物件裡有股說不出的能量: 「看到牆上的毛毯了嗎?那可是很特別的毛毯,在阿撒巴斯卡文化裡,製作毛毯、寫歌,或任何的職業都帶有無上光榮。 你必須經過寫歌者的同意,才能詠唱他的歌,因為在他寫的歌曲中,蘊含著他的靈魂。如果你是編織毛毯的人,除非你知道你能活得夠久,
unaffected by time 不受時間影響,也說是經典或永恆。   時間是人最寶貴的資產,光陰一去不復返。把握時間,它能帶來複利效應,成為我們知識和財富的好朋友。日新月異的科技業卻總是要跟時間賽跑,摩爾定侓或每年新機發表,似乎一切也跟著科技迭代的速度在向前跑。 只是,生命還是時間要
Thumbnail
聽著Jay Fung跟Alex Fung合譜的R&B旋律,反反覆覆,應該向前望還是留戀從前?站在十字路口的Kerryta周子涵,躊躇著。
Thumbnail
台北捷運上的「每天為你讀一首詩」,給枯燥的通勤族帶來一絲浪漫的氣息。 先來讀讀這首可愛又悲傷的捷運小詩吧! 仙人掌  ◎小令 然後非常失望 像粉筆斷到不能再斷 像雨傘開花後驚慌失措 像時鐘難過到只想倒退走 告訴我 要如何拔掉你身上的刺而不讓你 落下任何一滴淚 讓時間倒退的期盼
Thumbnail
『It’s time to let go』冰人這句話,貫穿了我這陣子的核心。 捍衛戰士獨行俠,你也看了嗎? 要怎麼面對一段不知道什麼時候會結束又如何發展的關係? 道別時我能像開始一樣的,微笑揮手嗎?
Thumbnail
圖片來自 William Warby 一般來說,資料的備份策略從規模的小到大,我們可以有幾種選擇,如果只是小規模的、輕量的,通常是燒成備份光碟,操作方式也多是手動的,然而隨著年紀的增長  Orz,資料也跟著增長,當資料量大到某種規模,手動備份就變得沒效率且不實際,這時我們就需要專門的備份軟體來自動的