1. ホーム
  2. datetime

2つのtime.Timeオブジェクトの差分

2023-11-15 07:19:09

質問

Go'sの初心者です。質問は基本的なことかもしれません。

2つのtime.Timeオブジェクトがあり、時間/分/秒の単位で2つの差を取得したいのです。と言ってみましょう。

t1 = 2016-09-09 19:09:16 +0530 IST
t2 = 2016-09-09 19:09:16 +0530 IST

上記の場合、差は0なので、00:00:00と表示されるはずです。別のケースを考えてみましょう。

t1 = 2016-09-14 14:12:48 +0530 IST
t2 = 2016-09-14 14:18:29 +0530 IST

この場合、差は00:05:41となります。を見てみると https://godoc.org/time を見ましたが、何もわかりませんでした。

どのように解決するのですか?

あなたは Time.Sub() の差を取るために、2つの time.Time の値の差を求めると、結果は time.Duration .

印刷されるとき time.Duration は自分自身を "intelligently"フォーマットします。

t1 := time.Now()
t2 := t1.Add(time.Second * 341)

fmt.Println(t1)
fmt.Println(t2)

diff := t2.Sub(t1)
fmt.Println(diff)

出力します。

2009-11-10 23:00:00 +0000 UTC
2009-11-10 23:05:41 +0000 UTC
5m41s

時刻の書式が必要な場合 HH:mm:ss にしたい場合は time.Time の値を作り、その Time.Format() のようなメソッドを使用します。

out := time.Time{}.Add(diff)
fmt.Println(out.Format("15:04:05"))

出力します。

00:05:41

の例を試してみてください。 囲碁の遊び場 .

もちろん、これは時差が1日未満の場合にのみ機能します。もし差がもっと大きいかもしれないなら、それは別の話です。結果は、日、月、年を含む必要があります。複雑さが大幅に増します。詳細については、この質問を参照してください。

golang time.Since() with months and years

そこで紹介されている解決策は、シグネチャを持つ関数を表示することでこの問題を解決しています。

func diff(a, b time.Time) (year, month, day, hour, min, sec int)

時刻が24時間以内であっても使用できます(その場合 year , monthday となるのは 0 ).