Date 如何设置持续时间格式
如何将time.Duration格式化/字符串化为?e、 g.Date 如何设置持续时间格式,date,go,iso8601,Date,Go,Iso8601,如何将time.Duration格式化/字符串化为?e、 g.P3Y6M4DT12H30M5S如果你只有时间。持续时间而没有上下文,你就倒霉了:持续时间只计算纳秒,一个月的纳秒数随天数而变化。与夏时制转换()、跳跃日和跳跃秒(GO的时间/代码>包甚至不考虑跳跃秒)有相似的、较小的不规则性。 给定两个time.time值,它看起来将执行您想要的操作,包括格式化--这将打印P3Y1M21DT17H18M58S: package main import ( "fmt" "github
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个月前”字符串密切相关的问题
在下面,您在两个时间上调用年()
,月()
,等等,并获取它们的差异(考虑不同的月长)。然后,格式化和存储这些差异是相对容易的部分,也可以通过例如“sDuration
(改编自)来完成
我不知道在完全符合标准方面可能还有什么缺点,但这让你非常接近。相关的/可能重复的@icza Great answer在那里-修改此链接到你的答案,并链接到另一个答案中链接的库。我认为所问的问题完全不同,足以保持两者的一致性(ISO句点格式与人类可读的“X时间前”),但如果人们想标记dupe,这一切都是好的。显然,答案的核心算法(计算日历周期)是相同的。github.com/rickb777/date/period是一个gem