英文:
Getting error could not find symbol value of time when trying to parse the date
问题
当我尝试运行以下语句时:
eolTime, tErr := time.Parse(time.RFC3339, eolDetails.EOL.(string))
// eolDetails.EOL.(string) 的值为 2021-04-30
我收到一个错误,错误信息是 error evaluating "time.RFC3339" as argument layout in function time.Parse: could not find symbol value for time" (unused functions are not included into executable)
。
这个错误是什么意思?我需要怎么解析日期为 Go 日期格式?
奇怪的是,在 playground 上运行正常。有什么想法可能出了什么问题吗?
英文:
When I try to run the following statement:
eolTime, tErr := time.Parse(time.RFC3339, eolDetails.EOL.(string))
// eolDetails.EOL.(string) evaluates to 2021-04-30
I get an error saying error evaluating "time.RFC3339" as argument layout in function time.Parse: could not find symbol value for time" (unused functions are not included into executable)"
What does this error mean? What do I need to do parse the date into go date?
Here is also the screenshot while debugging that shows the error:
It is strange, that it works fine on the playground. Any idea what could be wrong here?
答案1
得分: 3
Go版本1.20+
Go版本1.20添加了三个新的布局常量:DateTime
、DateOnly
和TimeOnly
<sup>(发布说明)</sup>。因此,如果您要解析的字符串只包含日期,您可以使用DateOnly
布局。
eolDetails := "2021-04-30"
eolTime, tErr := time.Parse(time.DateOnly, eolDetails)
if tErr != nil {
panic(err)
}
fmt.Println(eolTime)
https://go.dev/play/p/qrBiETSmRrs
Go版本1.19及更早版本
如果您使用的版本早于1.20,则可以使用自定义布局。在使用自定义布局时,您只需要确保它们是一个有效的“参考时间”,如包的文档所解释的那样:
> 要定义自己的格式,请__写下参考时间按您的方式格式化的样子__;参考ANSIC、StampMicro或Kitchen等常量的值以获取示例。模型是为了演示参考时间的样子,以便Format和Parse方法可以将相同的转换应用于一般时间值。
其中“参考时间”定义为:
> ... 这些布局中使用的参考时间是特定的时间戳:
> none > 01/02 03:04:05PM '06 -0700 >
因此,要解析您的日期字符串,您可以简单地执行以下操作:
eolLayout := "2006-01-02"
eolDetails := "2021-04-30"
eolTime, tErr := time.Parse(eolLayout, eolDetails)
if tErr != nil {
panic(tErr)
}
fmt.Println(eolTime)
https://go.dev/play/p/-6SqMz94VMT?v=goprev
相关的StackOverflow帖子:
英文:
Go version 1.20+
Go version 1.20 adds three new layout constants: DateTime
, DateOnly
, and TimeOnly
<sup>(release notes)</sup>. So, if the string you want to parse contains only a date you can use the DateOnly
layout.
eolDetails := "2021-04-30"
eolTime, tErr := time.Parse(time.DateOnly, eolDetails)
if tErr != nil {
panic(err)
}
fmt.Println(eolTime)
https://go.dev/play/p/qrBiETSmRrs
Go version 1.19 and older
If you are using a version that is older than 1.20, then you can use a custom layout. When using custom layouts you only need to make sure that they are a valid reference time, as explained by the package's documentation:
> To define your own format, write down what the reference time would look like formatted your way; see the values of constants like ANSIC, StampMicro or Kitchen for examples. The model is to demonstrate what the reference time looks like so that the Format and Parse methods can apply the same transformation to a general time value.
Where the "reference time" is defined as:
> ... The reference time used in these layouts is the specific time stamp:
> none
> 01/02 03:04:05PM '06 -0700
>
So to parse your date string you can simply do the following:
eolLayout := "2006-01-02"
eolDetails := "2021-04-30"
eolTime, tErr := time.Parse(eolLayout, eolDetails)
if tErr != nil {
panic(tErr)
}
fmt.Println(eolTime)
https://go.dev/play/p/-6SqMz94VMT?v=goprev
Related StackOverflow posts:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论