Heim >Backend-Entwicklung >C++ >Wie berechnet man die Wochennummer eines Datums anhand des ISO 8601-Standards?

Wie berechnet man die Wochennummer eines Datums anhand des ISO 8601-Standards?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-28 03:43:15973Durchsuche

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

Berechnen der Wochennummer aus einem Datum

Problem:
Bestimmen Sie bei einem gegebenen Datum die Wochennummer für dieses Datum innerhalb des Jahres. Im Jahr 2008 liegen beispielsweise der 1. bis 6. Januar in Woche 1 und der 7. bis 13. Januar in Woche 2. Wenn das Datum der 10. Januar 2008 ist, sollte die entsprechende Wochennummer 2 sein.

ISO 8601-Standard:

Beachten Sie, dass die Definition von Die „nte“ Woche des Jahres kann variieren. Der ISO 8601-Standard definiert spezifische Richtlinien für die Wochennummerierung:

  • Wochen beginnen am Montag
  • Woche 1 ist die Woche, die mindestens vier Tage des neuen Jahres enthält
  • Es kann mit Sicherheit eine 53. Woche geben Jahre

Implementierung:

Das folgende Codebeispiel in C zeigt, wie die Wochennummer gemäß dem ISO 8601-Standard berechnet wird:

#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;
}

Ausgabe:

Week number for January 10th 2008 is: 2

Das obige ist der detaillierte Inhalt vonWie berechnet man die Wochennummer eines Datums anhand des ISO 8601-Standards?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn