构造日期golang时使用int作为月份

时间:2016-03-21 23:58:01

标签: go

当我为int time.Date提供month作为参数时,它有效(Example):

time.Date(2016, 1, 1, 0, 0, 0, 0, time.UTC)

为什么,当我尝试将string转换为int然后使用该变量时,我收到错误:

cannot use mStr (type int) as type time.Month in argument to time.Date

示例:https://play.golang.org/p/-XFNZHK476

3 个答案:

答案 0 :(得分:12)

您必须将值转换为正确的类型:

import(
    "fmt" 
    "time" 
    "strconv"
) 

func main() {
    var m, _ = strconv.Atoi("01")
     // Now convert m to type time.Month 
    fmt.Println(time.Date(2016, time.Month(m), 1, 0, 0, 0, 0, time.UTC))
}

您已将其转换为int类型,但time.Date()的第二个参数属于time.Month类型,因此它会给您一个错误,表明您没有使用正确的类型。< / p>

答案 1 :(得分:1)

在第一个示例中,您将类型声明为time.Month,它不是int,而是time.Month。在第二个示例中,类型是int。如果你要进行演员表演,就像在这个例子中一样,它会像你期望的那样工作; https://play.golang.org/p/drD_7KiJu4

如果在您的第​​一个示例中,您将m声明为int或仅使用:=运算符(隐含类型将为int),您将获得与第二个例子。在这里展示; https://play.golang.org/p/iWc-2Mpsly

答案 2 :(得分:0)

Go编译器仅将常量转换为类型。需要显式转换变量。