Maison > développement back-end > C++ > Comment calculer le numéro de semaine d'une date à l'aide de la norme ISO 8601 ?

Comment calculer le numéro de semaine d'une date à l'aide de la norme ISO 8601 ?

Patricia Arquette
Libérer: 2024-11-28 03:43:15
original
989 Les gens l'ont consulté

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

Calcul du numéro de semaine à partir d'une date

Problème :
Étant donné une date, déterminez le numéro de semaine pour cette date dans l'année. Par exemple, en 2008, le 1er janvier au 6 janvier sont dans la semaine 1 et les 7 au 13 janvier sont dans la semaine 2. Si la date est le 10 janvier 2008, le numéro de semaine correspondant doit être 2.

Norme ISO 8601 :

Gardez à l'esprit que la définition du La « nième » semaine de l’année peut varier. La norme ISO 8601 définit des directives spécifiques pour la numérotation des semaines :

  • Les semaines commencent le lundi
  • La semaine 1 est la semaine contenant au moins quatre jours de la nouvelle année
  • Il peut y avoir une 53ème semaine dans certains ans

Mise en œuvre :

L'exemple de code suivant en C montre comment calculer le numéro de semaine selon la norme 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;
}
Copier après la connexion

Sortie :

Week number for January 10th 2008 is: 2
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal