Bagaimana untuk Mengira Bilangan Minggu Tarikh Menggunakan Piawaian ISO 8601?

Patricia Arquette
Lepaskan: 2024-11-28 03:43:15
asal
901 orang telah melayarinya

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;
}
Salin selepas log masuk

Output:

Week number for January 10th 2008 is: 2
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan