ホームページ >バックエンド開発 >Golang >2 つの Go time.Time オブジェクトの差を計算するにはどうすればよいですか?

2 つの Go time.Time オブジェクトの差を計算するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-03 22:34:12596ブラウズ

How to Calculate the Difference Between Two Go time.Time Objects?

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

問題:

時間、分の観点から 2 つの time.Time オブジェクトの差を求める、秒は一般的なタスクです。ただし、Go の時間パッケージは、この計算を実行するメソッドを直接提供しません。

解決策:

解決策は、Time.Sub() メソッドを使用することです。 time.Duration 値としての 2 つの time.Time オブジェクト。 time.Duration は、ナノ秒の精度で継続時間を表します。

目的の形式 (HH:mm:ss) を取得するには、継続時間の値を指定した Add() メソッドを使用して、新しい time.Time 値を構築します。 :

diff := t2.Sub(t1)
formattedDiff := time.Time{}.Add(diff)
fmt.Println(formattedDiff.Format("15:04:05"))

これにより、たとえ 1 日未満であっても、必要な形式で差分が出力されます。

詳細シナリオ:

時差が 1 日よりも長くなる可能性がある場合、年、月、日の計算が必要となるため、時差の計算はより複雑になります。このような場合、以下のようなヘルパー関数を使用できます。

func diff(a, b time.Time) (year, month, day, hour, min, sec int) {
  // Calculate the difference in seconds
  diffSeconds := int(a.Sub(b).Seconds())

  // Calculate days and remaining seconds
  days := diffSeconds / (24 * 3600)
  remainingSeconds := diffSeconds % (24 * 3600)

  // Calculate hours and remaining seconds
  hours := remainingSeconds / 3600
  remainingSeconds %= 3600

  // Calculate minutes and remaining seconds
  minutes := remainingSeconds / 60
  seconds := remainingSeconds % 60

  // Convert days to years, months, and remaining days
  yearDays := days / 365
  yearSeconds := yearDays * 365 * 24 * 3600
  months := (days - yearDays*365) / 30
  daySeconds := (days - yearDays*365 - months*30) * 24 * 3600

  return yearDays, months, days, hours, minutes, seconds
}

この関数は、年、月、日、時、分、秒の差を返し、時差を含む計算を可能にします。 24 時間を超えます。

以上が2 つの Go time.Time オブジェクトの差を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。