Go語言程式計算兩個時間段之間的差值
在本教程中,我們將編寫一個Go語言程式來計算以下程式中給定的兩個時間段之間的差值。為了獲得兩個時間段之間的時差,我們可以使用庫函式,也可以建立一個單獨的使用者定義函式來實現結果。
方法一:使用內建函式計算兩個時間段之間的差值
在這種方法中,我們將編寫一個Go語言程式,使用Go語言中預定義的函式來查詢時間段之間的差值。
語法
func (t Time) Sub(u Time) Duration
Go語言中的`sub()`函式用於獲取兩個日期之間的差值。在這個函式中,前兩個引數(即`t`和`u`)是日期值,該函式以小時、分鐘和秒返回兩個值之間的差值。
演算法
步驟1 − 首先,我們需要匯入`fmt`和`time`包。`time`包允許我們使用其他預定義的包,例如`time.Date()`。
步驟2 − 啟動`main()`函式。
步驟3 − 透過按`yy/mm/dd/hrs/min/sec`的順序在`time.Date()`函式中傳遞日期和時間來初始化`firstDate`和`secondDate`變數。
步驟4 − 使用`Sub()`函式查詢給定日期之間的差值,此函式以第二個日期作為引數並計算所需的差值。
步驟5 − 以各種格式在螢幕上列印結果。
步驟6 − 我們可以列印年份、天數、月份、週數、小時、秒、毫秒等。
示例
使用內建函式計算兩個時間段之間差值的Go語言程式
package main import ( "fmt" "time" ) func main() { firstDate := time.Date(2022, 4, 13, 3, 0, 0, 0, time.UTC) secondDate := time.Date(2010, 2, 12, 6, 0, 0, 0, time.UTC) difference := firstDate.Sub(secondDate) fmt.Println("The difference between dates", firstDate, "and", secondDate, "is: ") fmt.Printf("Years: %d\n", int64(difference.Hours()/24/365)) fmt.Printf("Months: %d\n", int64(difference.Hours()/24/30)) fmt.Printf("Weeks: %d\n", int64(difference.Hours()/24/7)) fmt.Printf("Days: %d\n", int64(difference.Hours()/24)) fmt.Printf("Hours: %.f\n", difference.Hours()) fmt.Printf("Minutes: %.f\n", difference.Minutes()) fmt.Printf("Seconds: %.f\n", difference.Seconds()) fmt.Printf("Nanoseconds: %d\n", difference.Nanoseconds()) }
輸出
The difference between dates 2022-04-13 03:00:00 +0000 UTC and 2010-02-12 06:00:00 +0000 UTC is: Years: 12 Months: 148 Weeks: 634 Days: 4442 Hours: 106629 Minutes: 6397740 Seconds: 383864400 Nanoseconds: 383864400000000000
方法二:使用使用者定義函式計算兩個時間段之間的差值
在這種方法中,我們將建立一個不同的函式來計算兩個提供的日期之間的差值。該函式將以兩個日期作為引數並返回相應的結果。
演算法
步驟1 − 首先,我們需要匯入`fmt`和`time`包。`time`包允許我們使用其他預定義的函式,例如`time.Date()`。
步驟2 − 建立`leapYear()`函式來計算兩個日期之間的閏年數。
步驟3 − 還建立`getDifference()`函式來獲取日期和時間之間的差值。`getDifference()`函式返回天數、小時、分鐘和秒。
步驟4 − 啟動`main()`函式。
步驟5 − 透過按`yy/mm/dd/hrs/min/sec`的順序在`time.Date()`函式中傳遞日期和時間來初始化`date1`和`date2`變數。
步驟6 − 如果`date1`發生在`date2`之後,則交換這兩個日期。
步驟7 − 透過將兩個日期作為引數傳遞給函式來呼叫`getDifference()`。
步驟8 − 將函式獲得的結果儲存在不同的變數中,並使用`fmt.Println()`函式以不同的格式在螢幕上列印它們。
示例
使用使用者定義函式計算兩個時間段之間差值的Go語言程式
package main import ( "fmt" "time" ) func leapYears(date time.Time) (leaps int) { y, m, _ := date.Date() if m <= 2 { y-- } leaps = y/4 + y/400 - y/100 return leaps } func getDifference(a, b time.Time) (days, hours, minutes, seconds int) { monthDays := [12]int{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} y1, m1, d1 := a.Date() y2, m2, d2 := b.Date() h1, min1, s1 := a.Clock() h2, min2, s2 := b.Clock() totalDays1 := y1*365 + d1 for i := 0; i < (int)(m1)-1; i++ { totalDays1 += monthDays[i] } totalDays1 += leapYears(a) totalDays2 := y2*365 + d2 for i := 0; i < (int)(m2)-1; i++ { totalDays2 += monthDays[i] } totalDays2 += leapYears(b) days = totalDays2 - totalDays1 hours = h2 - h1 minutes = min2 - min1 seconds = s2 - s1 if seconds < 0 { seconds += 60 minutes-- } if minutes < 0 { minutes += 60 hours-- } if hours < 0 { hours += 24 days-- } return days, hours, minutes, seconds } func main() { date1 := time.Date(2020, 4, 27, 23, 35, 0, 0, time.UTC) date2 := time.Date(2018, 5, 12, 12, 43, 23, 0, time.UTC) if date1.After(date2) { date1, date2 = date2, date1 } days, hours, minutes, seconds := getDifference(date1, date2) fmt.Println("The difference between dates", date1, "and", date2, "is: ") fmt.Printf("%v days\n%v hours\n%v minutes\n%v seconds", days, hours, minutes, seconds) }
輸出
The difference between dates 2018-05-12 12:43:23 +0000 UTC and 2020-04-27 23:35:00 +0000 UTC is: 716 days 10 hours 51 minutes 37 seconds
結論
我們已經成功地編譯並執行了一個Go語言程式來獲取兩個時間段之間的差值以及示例。在第一個示例中,我們使用了內建函式;在第二個示例中,我們使用了使用者定義函式來獲得結果。