ホームページ > バックエンド開発 > C++ > 特定の日付の週数を正しく決定するにはどうすればよいですか?

特定の日付の週数を正しく決定するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-25 12:21:11
オリジナル
185 人が閲覧しました

How to Correctly Determine the Week Number of a Given Date?

指定された日付の週数を正確に計算します

特定の日付の正しい週番号を決定することは、特に週末が 2 年にまたがる場合には、難しい作業になることがあります。これは、2012 年 12 月 31 日の週番号を見つけようとすると明らかです。多くの標準メソッドは、期待される 1 ではなく、誤った値 53 を返します。

ISO8601 の週番号と .Net の週番号の違いです。 .Net では数週間を数年にまたがることができますが、ISO 標準では許可されていません。

ISO 8601 週番号

ISO 8601 によれば、年の最初の週は、年の最初の木曜日が含まれる週です。これは、2012 年 12 月 31 日が 2013 年の第 1 週に当たることを意味します。

さまざまなプログラミング言語でのソリューション

  • C#
<code class="language-C#">// 假设一周从星期一开始
// 第 1 周是当年包含星期四的第一周
public static int GetIso8601WeekOfYear(DateTime time)
{
    // 通过移动到同一周的星期四、星期五或星期六来处理星期一、星期二或星期三
    DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time);
    if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday)
    {
        time = time.AddDays(3 - (int)day);
    }
    // 现在,我们知道这一周的星期四在这一周内,我们可以计算周数
    return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);
}</code>
ログイン後にコピー
  • Python
<code class="language-python">import datetime

def get_iso_week_number(date):
  """
  获取日期的 ISO 8601 周数。

  :param date: 要获取周数的日期。
  :type date: datetime.datetime

  :return: ISO 8601 周数。
  :rtype: int
  """
  year, week, _ = date.isocalendar()
  return week</code>
ログイン後にコピー
  • JavaScript
<code class="language-javascript">function getIsoWeekNumber(date) {
  // 通过移动到同一周的星期四、星期五或星期六来处理星期一、星期二或星期三
  var day = date.getDay();
  if (day < 4) {
    date.setDate(date.getDate() - (date.getDay() - 1)); // Move to Monday
  }
  // 现在,我们知道这一周的星期四在这一周内,我们可以计算周数
  var firstDayOfYear = new Date(date.getFullYear(), 0, 1);
  var days = Math.floor((date - firstDayOfYear) / (24 * 60 * 60 * 1000));
  return Math.ceil((days + firstDayOfYear.getDay() + 1) / 7);
}</code>
ログイン後にコピー

ISO 8601 標準に準拠することで、これらのソリューションは 2012 年 12 月 31 日の第 1 週を正確に返し、特定の日付の正確な週番号を保証します。

以上が特定の日付の週数を正しく決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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