Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 如何设置持续时间格式_Date_Go_Iso8601 - Fatal编程技术网

Date 如何设置持续时间格式

Date 如何设置持续时间格式,date,go,iso8601,Date,Go,Iso8601,如何将time.Duration格式化/字符串化为?e、 g.P3Y6M4DT12H30M5S如果你只有时间。持续时间而没有上下文,你就倒霉了:持续时间只计算纳秒,一个月的纳秒数随天数而变化。与夏时制转换()、跳跃日和跳跃秒(GO的时间/代码>包甚至不考虑跳跃秒)有相似的、较小的不规则性。 给定两个time.time值,它看起来将执行您想要的操作,包括格式化--这将打印P3Y1M21DT17H18M58S: package main import ( "fmt" "github

如何将time.Duration格式化/字符串化为?e、 g.
P3Y6M4DT12H30M5S

如果你只有
时间。持续时间
而没有上下文,你就倒霉了:
持续时间
只计算纳秒,一个月的纳秒数随天数而变化。与夏时制转换()、跳跃日和跳跃秒(GO的<代码>时间/代码>包甚至不考虑跳跃秒)有相似的、较小的不规则性。

给定两个
time.time
值,它看起来将执行您想要的操作,包括格式化--这将打印
P3Y1M21DT17H18M58S

package main

import (
    "fmt"
    "github.com/rickb777/date/period"
    "log"
    "time"
)

func main() {
    t1, err := time.Parse(time.RFC3339, "2012-11-03T13:41:02Z")
    if err != nil {
        log.Fatal(err)
    }
    t2, err := time.Parse(time.RFC3339, "2015-12-25T07:00:00Z")
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(period.Between(t1, t2))
}
我在用户icza中找到了与此相关的链接以及其他信息,该用户icza链接到一个与打印人类可读的“X个月前”字符串密切相关的问题

在下面,您在两个
时间上调用
年()
月()
,等等,并获取它们的差异(考虑不同的月长)。然后,格式化和存储这些差异是相对容易的部分,也可以通过例如“s
Duration
(改编自)来完成


我不知道在完全符合标准方面可能还有什么缺点,但这让你非常接近。

相关的/可能重复的@icza Great answer在那里-修改此链接到你的答案,并链接到另一个答案中链接的库。我认为所问的问题完全不同,足以保持两者的一致性(ISO句点格式与人类可读的“X时间前”),但如果人们想标记dupe,这一切都是好的。显然,答案的核心算法(计算日历周期)是相同的。github.com/rickb777/date/period是一个gem