ISO 8601 標準を使用して日付の週番号を計算するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-28 03:43:15
オリジナル
901 人が閲覧しました

How to Calculate the Week Number of a Date Using the ISO 8601 Standard?

日付から週番号を計算する

問題:日付を指定して、その週番号を決定します。年内のその日。たとえば、2008 年では、1 月 1 日から 1 月 6 日が第 1 週、1 月 7 日から 13 日が第 2 週になります。日付が 2008 年 1 月 10 日の場合、対応する週番号は 2 になります。

ISO 8601 規格:

その定義に留意してください。年の「n 番目」の週は異なる場合があります。 ISO 8601 標準では、週の番号付けに関する特定のガイドラインが定義されています。

    週は月曜日に始まります
  • 第 1 週は新年の少なくとも 4 日を含む週です
  • 特定の地域では53週目がある可能性がありますyears

実装:

次の C のコード サンプルは、ISO 8601 に従って週番号を計算する方法を示しています。標準:

#include <chrono>
#include <iostream>

using namespace std;

class Date {
private:
    int year;
    int month;
    int day;

public:
    Date(int year, int month, int day) : year(year), month(month), day(day) {}

    int getWeekNumber() {
        // Convert the date to a system_time object
        time_t t = time(0);
        tm* timeinfo = localtime(&t);
        
        // Create a system_time object for the first day of the year
        tm first_of_year;
        first_of_year.tm_year = year - 1900;
        first_of_year.tm_mon = 0;
        first_of_year.tm_mday = 1;
        time_t first_of_year_time = mktime(&first_of_year);
    
        // Calculate the number of days between the first day of the year and the given date
        long days_since_first_of_year = difftime(t, first_of_year_time) / (60 * 60 * 24);
    
        // Calculate the week number based on the number of days since the first day of the year
        int week_number = 1 + (days_since_first_of_year / 7);
    
        // Adjust the week number for possible week 53
        int days_in_year = days_since_first_of_year + 1;
        int days_in_last_week = days_in_year % 7;
    
        if (days_in_last_week >= 5 && (week_number == 53 || (week_number == 52 && days_in_year >= 371))) {
            week_number = 53;
        }
    
        return week_number;
    }
};

int main() {
    Date date(2008, 1, 10);
    cout << "Week number for January 10th 2008 is: " << date.getWeekNumber() << endl;
    return 0;
}
ログイン後にコピー

出力:

以上がISO 8601 標準を使用して日付の週番号を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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