当前位置: 首页 > 知识库问答 >
问题:

在Go中解析RFC-3339/ISO-8601日期时间字符串

黄博艺
2023-03-14

我尝试在Go中解析日期字符串< code >“2014-09-12t 11:45:26.371 z”。该时间格式定义为:

  • RFC-3339日期时间
  • ISO-8601日期时间

密码

layout := "2014-09-12T11:45:26.371Z"
str := "2014-11-12T11:45:26.371Z"
t, err := time.Parse(layout , str)

我得到了这个错误:

解析时间“2014-11-12T11:47:39.489Z”:月超出范围

如何解析这个日期字符串?

共有3个答案

丁业
2023-03-14

如回答所述,但要节省键入“2006-01-02T15:04:05.000Z”作为布局,您可以使用包的常量RFC3339。

str := "2014-11-12T11:45:26.371Z"
t, err := time.Parse(time.RFC3339, str)

if err != nil {
    fmt.Println(err)
}
fmt.Println(t)

https://play.golang.org/p/Dgu2ZvHwTh

万俟皓
2023-03-14

要使用的布局确实是RickyA的答案中描述的“2006-01-02T15:04:05.000Z”。
这不是“go第一次提交的时间”,而是一种记忆上述布局的助记方式。
请参阅pkg/time:

布局中使用的参考时间为:

Mon Jan 2 15:04:05 MST 2006

也就是Unix时间< code>1136239445。< br >由于MST是GMT-0700,参考时间可以认为是

 01/02 03:04:05PM '06 -0700

(1,2,3,4,5,6,7,前提是你要记住1代表月份,2代表日期,这对于像我这样习惯了日-月日期格式的欧洲人来说并不容易)

如“time.parse:为什么golang错误地解析时间?”所示,必须完全遵守该布局(使用1,2,3,4,5,6,7)。

公西翼
2023-03-14

使用此处描述的确切布局编号和此处的一篇不错的博客文章。

所以:

layout := "2006-01-02T15:04:05.000Z"
str := "2014-11-12T11:45:26.371Z"
t, err := time.Parse(layout, str)

if err != nil {
    fmt.Println(err)
}
fmt.Println(t)

给予:

>> 2014-11-12 11:45:26.371 +0000 UTC

我知道。难以置信。也是第一次抓到我。Go只是没有对日期时间成分使用抽象语法(< code>YYYY-MM-DD),而是使用这些确切的数字( <罢工> 我认为第一次下围棋的时间 不,根据这个。有人知道吗?).

 类似资料:
  • 如何将字符串日期格式转换为日期,我有格式为以下格式的日期字符串: 接下来,我尝试了,但没有运气。 所有上述语句都存在解析错误。

  • 我有一个字符串列表包含147个不同的时间戳。我正在尝试将列表中的每个日期/元素转换为ISO 8601 / RFC 3339格式。 到目前为止,我已经尝试使用库中的函数 它会导致以下错误 还有其他解决方案吗?谢谢

  • 问题内容: 在Java中,我需要使用以下格式的String来创建Calendar对象: 该字符串将始终设置为GMT时间。所以这是我的代码: 然后: 我得到以下输出: 如您所见,这是错误的,因为提供的时间是格林尼治标准时间而不是CET。我认为发生的事情是,它认为所提供的时间在CET(这是我当前的时区)中,因此将时间从CET转换为GMT,因此从最终结果中减去了两个小时。 有人可以帮我吗? 谢谢 顺便说

  • 如何使用ISO 8601和RFC 3339的格式标准生成日期时间戳? 目标是一个看起来像这样的字符串: 格式: 年、月、日,作为“xxxx-xx-xx” 字母“T”作为分隔符 时、分、秒、毫秒,以“xx:xx:xx.xxx”表示。 字母“Z”作为零偏移量的区域指示符,也称为“Z”。UTC、GMT、Zulu时间。 最佳情况: null 相关问答:如何在iOS中获取ISO 8601日期? 以下是我目前

  • 问题内容: 需要有关将具有以下结构的ISO 8601日期转换为javascript的帮助/提示。 我想这样格式化日期: 我想保持此解决方案尽可能干净和最小。 问题答案: datejs可以解析以下内容,您可能想尝试一下。 编辑:正则 表达式版本 结果 Edit2: 我将时区更改为EST,现在我关注了 返回 基本上 返回 正则表达式部分只是将上述字符串转换为您所需的格式。

  • 我在我的项目中使用 Spring boot 和 Java 1.8。我们正在从外部系统接收一个需要解析的日期字符串。问题是外部系统可以发送任何符合ISO 8601的日期时间,我们需要解析任何ISO 8601格式的字符串。谁能建议我怎么做?有没有用于执行此操作的库? 传递的两种日期时间格式是2018-11-01T16:26:15 0100,2018-10-31T08:27:00.0000000Z,还可