[本文出自天外归云的博客园]
分享一个常用的时间字符串的加减的小方法,可以把一种格式的时间字符串转化成日期时间后加减天数,再转化为目标格式返回。
代码:
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)
}
运行结果:

本文来自博客园,作者:天外归云,转载请注明原文链接:https://www.cnblogs.com/LanTianYou/p/14956349.html
浙公网安备 33010602011771号