1. 程式人生 > 其它 >Golang時間字串轉換計算器

Golang時間字串轉換計算器

[本文出自天外歸雲的部落格園]

分享一個常用的時間字串的加減的小方法,可以把一種格式的時間字串轉化成日期時間後加減天數,再轉化為目標格式返回。

程式碼:

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)
}

執行結果: