登录
首页 >  Golang >  Go问答

golang 中暂停一个月的时间

来源:stackoverflow

时间:2024-02-06 15:15:23 214浏览 收藏

哈喽!今天心血来潮给大家带来了《golang 中暂停一个月的时间》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我想在 golang 的约会中休息一个月,我有一个三月和二月的例子:

date := time.date(2023, time.march, 31, 0, 0, 0, 0, time.utc)

然后做这个:

period := date.adddate(0, -1, -0)

但是程序给了我:

original date: 2023-03-31 00:00:00 +0000 utc
date after rest: 2023-03-03 00:00:00 +0000 utc

我期望:

2023-02-28 00:00:00 +0000 UTC

同时,我希望每个月的休息都能动态进行。

谢谢。


正确答案


正如 go 自带的自动转换让你烦恼一样,你也可以利用它。

诀窍是如何获取上个月的天数。

// as there is no 0 day, it means the last day of the previous mouth
totday := time.date(y, m, 0, 0, 0, 0, 0, time.utc).day()

完整代码如下:

package main

import (
    "fmt"
    "time"
)

func previousMouth(t time.Time) time.Time {
    y, m, d := t.Date()

    curTotDay := time.Date(y, m+1, 0, 0, 0, 0, 0, time.UTC).Day()
    totDay := time.Date(y, m, 0, 0, 0, 0, 0, time.UTC).Day()
    if d == curTotDay {
        d = totDay
    }

    return time.Date(y, m-1, d, 0, 0, 0, 0, time.UTC)
}

func main() {
    date := time.Date(2023, time.March, 31, 0, 0, 0, 0, time.UTC)
    fmt.Println(previousMouth(date))
}

在线运行:goplayground

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>