Golang時間字串轉換計算器
阿新 • • 發佈:2021-06-30
[本文出自天外歸雲的部落格園]
分享一個常用的時間字串的加減的小方法,可以把一種格式的時間字串轉化成日期時間後加減天數,再轉化為目標格式返回。
程式碼:
package pintia import ( "fmt" "time" ) // TimeStrConverter 時間字串轉換計算器 type TimeStrConverter struct { InputDateFormat string OutPutDateFormat string } // AddDuration 時間字串加減天 // dateStr 是輸入的時間字串 // n 天數(負數為減,正數為加) func (t *TimeStrConverter) AddDuration(dateStr string, n int) (string, error) { // 1. 將dateStr按指定格式轉換成時間 endDate, err := time.Parse(t.InputDateFormat, dateStr) if err != nil { return "", err } // 2. 加上n天——24*n小時 durationStr := fmt.Sprintf("%+vh", 24*n) duration, _ := time.ParseDuration(durationStr) startDate := endDate.Add(duration) // 3. 將計算後的日期轉成指定格式的時間字串 startDateStr := startDate.Format(t.OutPutDateFormat) return startDateStr, nil }
測試程式碼:
package pintia import ( "testing" "github.com/stretchr/testify/assert" ) func TestDateStrAddDuration(t *testing.T) { // 準備測試資料 inputDateStr := "20210630" durationDays := -3 timeStrConverter := TimeStrConverter{InputDateFormat: "20060102", OutPutDateFormat: "2006-01-02"} // 執行待測方法 outputDateStr, err := timeStrConverter.AddDuration(inputDateStr, durationDays) t.Logf("outputDateStr->%+v", outputDateStr) // 斷言 assert.Nil(t, err) assert.Equal(t, "2021-06-27", outputDateStr) }
執行結果: