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

使用Go解析ISO 8601持续时间(例如PT90M)

刘丰羽
2023-03-14

有没有什么简单的方法可以将ISO 8601字符串持续时间(< code > P(n)Y(n)M(n)DT(n)H(n)M(n)S )转换为< code >时间。持续时间?

来自维基百科的ISO 8601持续时间:

例如,“P3Y6M4DT12H30M5S”表示“三年、六个月、四天、十二小时、三十分钟和五秒”的持续时间。

共有2个答案

仲君昊
2023-03-14

发现现有的解决方案不太令人满意,我创建了自己的模块来解析ISO 8601持续时间,并将其直接转换为time.Duration。我希望你觉得它有用。:)

用法示例:https://go.dev/play/p/Nz5akjy1c6W

公孙森
2023-03-14

标准库中没有这方面的API,但有一个第三方库可以将ISO 8601持续时间添加到< code >时间中。时间:https://godoc . org/github . com/senseyeio/duration # duration . shift。

ISO 8601持续时间通常不能转换为< code >时间。持续时间,因为它取决于基本< code >时间。时间。

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

package main

import (
    "fmt"
    "time"

    "github.com/senseyeio/duration"
)

func main() {
    d, _ := duration.ParseISO8601("P1D")
    today := time.Now()
    tomorrow := d.Shift(today)
    fmt.Println(today.Format("Jan _2"))    // Nov 11
    fmt.Println(tomorrow.Format("Jan _2")) // Nov 12
}
 类似资料:
  • 我有ISO8601格式的持续时间值,我将其转换为时间值为整数秒,如下所示: ISO8601格式的持续时间值=“P1Y”。 我将该值存储在“时间-单位-秒”中。因此,当我检索的值将是在int,我想转换回ISO8601持续时间格式,所以我应该得到“P1Y”转换后回来。 有没有快速的方法可以做到这一点?或者我必须把时间的int值转换成float,然后通过某种方法把它转换成ISO8601持续时间。

  • 在ISO 8601中,持续时间的格式为<code>P[n]Y[n]M[n]DT[n]H[n]M[n]S。 例子: 20秒: 一年两个月三天四小时五分钟六秒: 问题: 给定一个包含iso 8601格式的持续时间的字符串。我想获得这段时间的总秒数。标准C 11中推荐的实现方式是什么? 备注: 例如,boost DateTime中有ptime from _ iso _ string(STD::strin

  • 我有一个ISO 8601格式的持续时间,例如:PT5M或PT120S。 有没有什么方法可以使用moment.js解析这些并获取持续时间中指定的分钟数? 谢谢大家! PS:我研究了解析ISO 8601持续时间,并将ISO 8601时间格式转换为正常持续时间 但很想知道这是否可行。

  • 问题内容: 我有一个价值,我想得到另一个正好是1个月前的时间。 我知道可以用(想要另一个)进行减法,但这会导致a,而我反过来需要它。 问题答案: 尝试AddDate: 产生: 游乐场:http://play.golang.org/p/QChq02kisT

  • 对于我的项目,我必须读取在CSV文件中提供给我们的数据并以某种格式将其写出。我几乎完成了,但我遇到的问题是我的程序没有完全读取给定的时间。从这里开始,我的程序只是读取所有给定的时间。 我试图将<code>字符串时间。 这应该会回来 [芝麻街|埃尔莫之最1240:28:11] 但它返回 [Elmo的最佳|芝麻街124;2:29,1:30,2:09,1:46,1:55,2:02,1:42,2:40,1

  • 在ISO 8601中,持续时间的格式为PT5M(5分钟)或PT2H5M(2小时5分钟)。我有一个JSON文件,其中包含这种格式的值。我想知道spark是否可以提取分钟的持续时间。我尝试将其读取为“DateType”,并使用“minutes”函数获取分钟数,结果返回空值。 示例json 目前,我正在将其作为字符串读取并使用“regex_extract”函数。我想知道一种更有效的方法。 https:/