Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengira Bilangan Minggu Tarikh Menggunakan Piawaian ISO 8601?

Bagaimana untuk Mengira Bilangan Minggu Tarikh Menggunakan Piawaian ISO 8601?

Patricia Arquette
Patricia Arquetteasal
2024-11-28 03:43:15902semak imbas

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

Mengira Nombor Minggu dari Tarikh

Masalah:
Diberi tarikh, tentukan nombor minggu untuk tarikh tersebut dalam tahun tersebut. Sebagai contoh, pada tahun 2008, 1 Januari hingga 6 Januari adalah dalam minggu 1 dan 7 hingga 13 Januari adalah dalam minggu 2. Jika tarikh 10 Januari 2008, nombor minggu yang sepadan hendaklah 2.

Standard ISO 8601:

Perlu diingat bahawa takrifan Minggu "ke-nth" dalam setahun boleh berbeza-beza. Piawaian ISO 8601 mentakrifkan garis panduan khusus untuk penomboran minggu:

  • Minggu bermula pada hari Isnin
  • Minggu 1 ialah minggu yang mengandungi sekurang-kurangnya empat hari dalam tahun baharu
  • Mungkin ada minggu ke-53 dalam keadaan tertentu tahun

Pelaksanaan:

Sampel kod berikut dalam C menunjukkan cara mengira nombor minggu mengikut piawaian 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;
}

Output:

Week number for January 10th 2008 is: 2

Atas ialah kandungan terperinci Bagaimana untuk Mengira Bilangan Minggu Tarikh Menggunakan Piawaian ISO 8601?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn