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
922 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!

source:php.cn
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