为了账号安全,请及时绑定邮箱和手机立即绑定

Go不支持运算符重载,但是如何解释时间包

Go不支持运算符重载,但是如何解释时间包

Go
Smart猫小萌 2023-08-14 14:56:05
我已经进行 Go 之旅有一段时间了,我刚刚注意到这行代码:-today := time.Now().Weekday()    switch time.Saturday {    case today + 0:        fmt.Println("Today.")    case today + 1:        fmt.Println("Tomorrow.")    case today + 2:        fmt.Println("In two days.")    default:        fmt.Println("Too far away.")    }如果 Go 不支持运算符重载,我如何使用“+”运算符来增加日期?
查看完整描述

2 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

time.Now().Weekday()返回类型为 的值time.Weekday,该值是inttoday+1有效,因为 1 是一个无类型常量,并且它的类型是根据上下文确定的。在这种情况下, 和today都是1类型time.Weekday

另请注意,由于其定义方式,time.Saturday 为 6,因此time.Saturday == today+2可以工作,但time.Saturday+2不会匹配任何有效的工作日。


查看完整回答
反对 回复 2023-08-14
?
吃鸡游戏

TA贡献1829条经验 获得超7个赞

我不确定你的问题,但我想你可以注意一下包裹time。它很强大。


Go中有多种时间类型,如time.weekday、 、time.duration、 等time.month。它们支持+运算符,因为它们的基础类型是数字,但time.Time不受支持。它的底层类型是结构。我们可以使用 for 运算的方法time.Time,如Time.add, Time.sub, Time.adddate, Time.after, Time.before,Time.equa可以使用Time.unixorTime.unixnano来获取数值类型的时间戳进行运算。


作为例子,我实现了两种方法来计算从某个时间到下一周的时间以及与当前时间的偏差。


import (

    "time"

)


func NextWeekdayTime(now time.Time, weekday time.Weekday) time.Time {

    return now.AddDate(0, 0, NextWeekdayNum(now, weekday))

}


func NextWeekdayNum(now time.Time, weekday time.Weekday) int {

    diff := (weekday - now.Weekday()) + 7

    if diff >= 7 {

        diff -= 7

    }


    return int(diff)

}


查看完整回答
反对 回复 2023-08-14
  • 2 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信