ホームページ > バックエンド開発 > Golang > Goで週番号から日付範囲を取得する方法?

Goで週番号から日付範囲を取得する方法?

Barbara Streisand
リリース: 2024-12-08 07:52:12
オリジナル
937 人が閲覧しました

How to Get a Date Range from a Week Number in Go?

Golang の週番号による日付範囲

はじめに

指定された週番号に対応する日付範囲を決定するには、次のようにします。多くのアプリケーションに共通の要件です。 Golang には週番号を取得する便利な関数が用意されていますが、対応する日付範囲を取得する組み込みメカニズムがありません。この記事では、この問題に対処する実用的な Golang ソリューションを紹介します。

カスタム関数の実装

特定の週の日付範囲を確立するには、次の手順を実行する必要があります。 :

  1. 月曜日に合わせる: As Time.ISOWeek()月曜日に合わせて、現在の時刻を年の最初の月曜日に設定することから始めます。
  2. 週番号の検索: Time.ISOWeek() を使用して、今回の週番号を計算します。
  3. 週の差を調整: ターゲットの週番号と現在の週番号の差を求め、時刻を調整します

これらの原則に基づいて、次のように WeekStart() というカスタム関数を作成できます。

func WeekStart(year, week int) time.Time {
    // Start from middle of the year
    t := time.Date(year, 7, 1, 0, 0, 0, 0, time.UTC)

    // Align to Monday
    if t.Weekday() == time.Sunday {
        t = t.AddDate(0, 0, -6)
    } else {
        t = t.AddDate(0, 0, -int(t.Weekday())+1)
    }

    // Adjust for week difference
    y, w := t.ISOWeek()
    t = t.AddDate(0, 0, (week-w)*7)

    return t
}
ログイン後にコピー

使用法と例

この機能を利用するには、年と希望の週番号を次のように渡します。引数:

fmt.Println(WeekStart(2018, 1)) // Output: 2018-01-01 00:00:00 +0000 UTC
fmt.Println(WeekStart(2018, 2)) // Output: 2018-01-08 00:00:00 +0000 UTC
ログイン後にコピー

週の最後の日の取得

週の最初と最後の日の両方が必要な場合は、関数を拡張して返すことができます。終了日:

func WeekRange(year, week int) (start, end time.Time) {
    start = WeekStart(year, week)
    end = start.AddDate(0, 0, 6)
    return
}
ログイン後にコピー

この拡張機能により次のことが可能になります使用法:

fmt.Println(WeekRange(2018, 1)) // Output: 2018-01-01 00:00:00 +0000 UTC 2018-01-07 00:00:00 +0000 UTC
fmt.Println(WeekRange(2018, 2)) // Output: 2018-01-08 00:00:00 +0000 UTC 2018-01-14 00:00:00 +0000 UTC
ログイン後にコピー

このカスタム実装により、特定の週番号に対応する日付範囲を簡単に取得できるようになり、Golang アプリケーションでのカレンダー操作やデータ分析にとって貴重なツールとなります。

以上がGoで週番号から日付範囲を取得する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート