Les jours de la semaine en programmation

a marqué ce sujet comme résolu.

Bonjour,

Je suis en train de programmer un petit module qui retourne une valeur en fonction du jour. Pour moi, le premier jour de la semaine est le lundi. Or, je viens de réaliser que le jour « 0 » dans les langages de programmation est le dimanche.

Dois-je modifier ces indices moi-même pour que « 0 » représente lundi et « 6 » dimanche ou dois-je laisser l’utilisateur du module faire la modification de son côté ?

Salut,

Je pense que tu fais ici référence à la fonction strftime(), dont une bonne partie est standardisée (c’est-à-dire qu’elle fonctionne à l’identique quel que soit le langage que tu choisis), mais qui est assez américano-centrée. Le plus simple pour toi est donc de considérer le dimanche comme le premier jour de la semaine (indice 0) et le lundi comme le dernier (indice 6).

+0 -1

Si c’est bien strftime(), changer l’identifier doit marcher : d’après la doc, %w fait de 0 à 6 avec Dimanche comme premier jour, et %u fait de 1 à 7 avec Lundi comme premier jour. J’imagine qu’il doit exister des trucs similaires pour les autres langages. Ça semble lié à la norme ISO 8601.

+1 -0

Si c’est bien strftime(), changer l’identifier doit marcher : d’après la doc, %w fait de 0 à 6 avec Dimanche comme premier jour, et %u fait de 1 à 7 avec Lundi comme premier jour. J’imagine qu’il doit exister des trucs similaires pour les autres langages. Ça semble lié à la norme ISO 8601.

Gabbro

Bien vu, je m’étais basé sur la référence de strftime() pour Python qui ne mentionne pas ce mot-clé, mais qui fonctionne également chez moi sur ce langage. 👍

+0 -0

Ça semble lié à la norme ISO 8601.

Gabbro

Certains langages permettent de préciser cette norme (comme PHP ou C++). En JavaScript, on ne peut pas faire la distinction sans une fonction. En Go ou en Python, il me semble que lundi est le premier jour.

Du coup, je ne sais pas si je dois faire en fonction du langage ou si je devrais plutôt me baser sur la norme.

À la lecture de ta question, j’ai l’impression que tu recherches plus une bonne pratique qu’une solution technique.

Quand tu débutes le développement d’un programme, tu choisis le langage qui te fournira (ou pas) certaines fonctionnalités. Une fois le programme écrit, changer de langage revient à tout réécrire (sauf cas exceptionnel comme le passage de Java à Kotlin qui peuvent cohabiter, si mes souvenirs sont bons).

Rien ne t’interdit d’utiliser les fonctionnalités, même non normalisées, proposées par le langage que tu as choisi. Au contraire, cela améliore généralement la qualité de ton code :)

+0 -0

En fait, comme je ne serais potentiellement pas le seul utilisateur, je me demande quel serait le meilleur usage des dates dans ce cas présent.

J’ai le langage pour ce module mais concernant la différence potentielle de la première journée de la semaine (lundi ou dimanche), je ne sais pas ce qui serait le plus intelligent.

En fait , ta question ne devrait pas s’appeler 'les jours de la semaine en programmation’, mais 'les jours de la semaine, normalisation’.

elegance

J’insiste sur le fait que ma question concerne la programmation.

Peux-tu nous expliciter le contexte de ta demande, s’il te plaît ? Que cherches-tu à faire ? Quel résultat cherches-tu à obtenir ?

Jérôme Deuchnord

En gros, je cherche à savoir s’il faut suivre ce qu’un langage propose ou si il vaut mieux utiliser une norme. Je viens tout juste de découvrir que tous les langages n’ont par défaut pas le même jour 0.

Derrière ta question, il y a une question d’internationalisation : tous les pays n’utilisent pas le même jour comme premier jour de la semaine (typiquement, le lundi en France et le dimanche aux USA).

Sachant ça, la réponse à ta question devient relativement évidente :

  1. Il faut utiliser comme premier jour de la semaine le jour choisi par l’utilisateur (par défaut, celui associé à son pays — et non à sa langue).
  2. Un langage ou framework qui impose ce choix est un outil qui ne gère pas correctement l’internationalisation, il faut donc utiliser un meilleur outil et/ou remonter le bug à qui de droit.

PS : il ne faut donc ni suivre une norme aveuglément, ni suivre ce que propose un langage par défaut, mais suivre ce dont a besoin l’utilisateur. Dans ton cas, ça implique sans doute d’ajouter un paramètre pour que l’utilisateur puisse choisir quel est le jour qui commence la semaine — avec une constante et/ou une méthode pour récupérer ça selon la ou les normes ISO concernées, parce que c’est toujours pratique.

Ta question concerne la programmation…

Tu crées un module/une fonction qui recevra un n° de jour et qui renverra une certaine valeur.

Et tes collègues vont utiliser cette fonction.

Soit tu as la possibilité de dialoguer avec tes collègues, et vous allez vous mettre d’accord, vous conviendrez ensemble d’une certaine convention (convenir d’une convention … c’est pas un pléonasme ça ?).

Soit tu n’as pas la possibilité de dialoguer avec eux, et c’est plus compliqué. A toi de prendre une décision, et de bien documenter ton module, pour qu’il n’y a pas réclamation plus tard.

La dernière option, c’est d’avoir un fonctionnement par défaut, qui respecte l’une des normes, et un fonctionnement optionnel, qui respecte l’autre norme. Mais là encore, s’il y a un quiproquo sur le fonctionnement par défaut, il y a risque de réclamation.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte