Date: prev next · Thread: first prev next last
2015 Archives by date, by thread · List index


Bonjour à tous,

Je peux vous indiquer l'expérience que j'ai faite du calcul de durée dans un autre langage de 
programmation.

J'ai calculé la durée des deux manières, soit en nombre de jours, soit en années/mois/jours.
La première est triviale.
La deuxième mérite qu'on s'y attarde :
- on commence par calculer le nombre entier d'années entre les deux dates
- puis on calcule le nombre entier de mois entre la date initiale augmentée du nombre entier 
d'années
- puis on calcule le nombre entier de jours entre la date initiale augmentée du nombre entier 
d'années et du nombre entier de mois
Le nombre de jours dans le mois tient compte des mois qui se sont écoulés :
- du 27 février au 2 avril, on un mois et 6 jours avec cette méthode quelque soit l'année, mais pas 
le même nombre de jours selon que l'année est bissextile ou non
- si on fait le calcul à partir d'une autre date de départ, ça peut donner un autre jour du mois ; 
27 mars plus 1 mois et 6 jours = 3 mai 

Ce résultat est plus parlant qu'un nombre de jours mais il doit être manipulé avec précautions ; 
l'addition de deux punitions exprimées en années-mois-jours n'est pas très rigoureuse...
Je ne l'utiliserai que comme un affichage.
Je suppose que quand on inflige une punition, elle est exprimée avec une unité et, au mieux, une 
sous-unité, pas 2 ans, 3 mois, 5 jours, 2 heures, 3 minutes !

Cordialement,

Bernard Escaich


Le 10 mars 2015 à 12:15, Docgranville <Docgranville@aol.com> a écrit :

Bonjour,

Pour une fois que j'ai un public, j'en profite...

Je comprends effectivement la démarche et reconnais bien ces notions de "semaines" ou de "mois" 
qu'on trouve dans de nombreuses dispositions légales, mais qui à l'usage deviennent plus 
difficiles à manipuler dès qu'on les confronte à notre réalité faite de jours...

Si je me trouvais face à ce que tu veux faire, je crois que ma réflexion s'opèrerait autour de 
deux contraintes :
- d'abord, je ne crois pas que je transformerais les semaines en mois ni les mois en années ; je 
stockerais le tout sous sa forme initiale et je ressortirais l'information brute, sans 
transformation ; ce n'est pas obligatoirement la même signification d'avoir pris 2 mois de 
suspension ou d'avoir accumulé 1 mois et 4 semaines ; dans le premier cas, on peut supposer que 
c'est une grosse faute qui a été commise alors que dans l'autre, on a quelqu'un qui est un peu un 
multi-récidiviste (il a peut-être pris une fois un mois pour une faute importante et 4 fois une 
semaine ou une fois 2 semaines et 2 fois une semaine pour des fautes moins importantes mais 
néanmoins existantes) ; perso, je ne verrais pas de mal à évoquer un total de "2 mois et 13 
semaines de sanction disciplinaire" plutôt que 5 mois et 1 semaines ;
- en second lieu, pour la saisie, je créerais un formulaire avec un champ pour les semaines, un 
autre pour les mois et un autre pour les années mais je ferais en sorte de stocker le tout dans 
un champ unique de la base, sans rien perdre de la précision initiale (donc sans transformation 
des semaines en mois ou l'inverse).

Pour réaliser le deuxième point (le stockage des mois/semaines/années) dans un champ unique de la 
BD, j'ai une recette ; elle n'est pas transposable de manière universelle mais pour le ,domaine 
que tu évoques, elle peut tout à fait convenir : en fait, je en sorte de stocker tout ça sous la 
forme d'un nombre entier dont chaque chiffre serait le compteur des années/mois/semaines ; par 
exemple 218 signifierait 2 ans, 1 mois et 8 semaines ; évidemment, tu me diras que si la personne 
en question se prend plus de 9 semaines, on est ennuyé, vu qu'on ne sait pas si 2113 signifie 2 
ans 1 mois et 13 semaines ou 2 ans 11 mois et 3 semaines... Mais ce n'est pas un problème : il 
suffit de multiplier pour aboutir à un grand entier mais qui ne pose aucun doute ; par exemple, 
on peut imaginer que peut de monde atteindrait un cumul de 1.000 semaines de sanctions ; donc, on 
peut multiplier le nombre de moi par 1.000 en étant certain que que le chiffre des milliers 
indiquera des mois et non une quelconque partie des semaines ; de la même façon, je ne pense pas 
qu'il faille s'attendre à ce qu'un individu (de nature humaine, bien sûr) aille cumuler plus de 
99 mois de sanctions disciplinaires ; auquel cas, il suffirait de multiplier le nombre d'années 
par 100.000 (les 1.000 appliqués aux signifiants des mois et les 100 supplémentaires propres aux 
signifiants des années), voire par 1.000.000 si on veut vraiment être certain, ou bien qu'on 
craint de faire face à une autorité prononçant des sanctions sans toutefois jamais exclure 
définitivement, ou bien encore si simplement on veut être un peu cohérent et se dire que chaque 
série de 3 chiffres dans le nombre se rapporte à une unité de temps différente (les millions pour 
les années, les milliers pour les mois et les unités pour les semaines) ; ou on peut aussi 
imaginer que le cumul ne se fera pas obligatoirement pour un individu mais qu'une volonté d'étude 
statistique pourra conduire à vouloir déterminer la durée des sanctions prononcées par l'autorité 
dans un laps de temps et auquel cas, la relation aux limites propres à un individu saute et il 
faut prévoir une échelle plus grande et un plus grand entier.

En tout cas, quel que soit le choix opéré,  on se retrouve avec des nombres manipulables 
mathématiquement, regroupés dans un seul champ de la base et dont on peut extraire la 
signification par un simple calcul mathématique, avec des [floor(x)] pour obtenir la partie 
entière d''un nombre (en l'occurrence, c'est la partie entière d'une division par 1.000.000 ou 
1.000 qui nous intéressera), des [mod(x,a)] pour obtenir le reste d'une division de "x" par "a", 
où les "a" en question serait, ici aussi, 1.000.000 ou 1.000 et des combinaisons de deux.

Là je vais déjeuner mais je pourrai développer plus si besoin.

A+

Le 10/03/2015 06:13, Eric Hoffmann a écrit :
Bonjour

Merci pour ta réponse précise... et amusante !

Mon champ contient des informations qui sont des nombres entiers de semaines (entre 1 et 4), des 
nombres entiers de mois (entre 1 et 11) et 1 année.
Dans ma BD, il s'agit de durées de sanctions disciplinaires appliquées à l'encontre de 
professionnels de mon métier. Ces durées sont définies comme cela dans nos textes qui ne 
précisent pas si le mois dure 28, 29, 30 ou 31 jours.

Pour le moment, le type de champ que j'ai choisi est VARCHAR. Mais avec ce type de champ, je ne 
peux pas faire de calculs comme la somme des durées de sanction d'un professionnel.
Je me disais qu'un type de champ défini avec une durée aurait pu répondre à ma question, mais 
ton argumentation précise sur la durée réelle du mois exclue le mois de cet éventuel type de 
champ.

Je pense que je verrai plus tard dans le développement de ma BD, la possibilité de créer une 
table secondaire contenant plusieurs champs (nb compris entre 1 et 11 ; fraction d'année : 
semaine, mois, année) et que je verrai comment faire les calculs avec cela.

Merci encore pour la précision de ta réponse.

Cordialement,

*Éric HOFFMANN
*

Le 09/03/2015 20:52, Docgranville a écrit :
Bonjour,

Quelque chose doit m'échapper mais quelle est la spécificité de ton champ ?

Que ta colonne indique 1, 3, 7 ou 36, il importe assez peu que ce soient des jours, des 
semaines, des carottes, des chars d'assaut ou des pots de peinture, non ?

Le seul truc, c'est qu'au bout d'un certain nombre (environ 4), ça fait un mois ; mais à part 
ça, je ne vois pas bien où tu veux en venir.

D'autant que "1 mois", ça ne signifie pas grand chose.

Autant 1 minute, c'est rarement plus (ou moins) de 60 secondes ; autant il est rare qu'une 
heure s'éloigne beaucoup de 60 minutes, qu'un jour s'étende au-delà des 24 heures 
règlementaires et qu'une semaine survive au terme de son 7ème jour, autant un mois, c'est tout 
de suite plus compliqué.

Un mois, ça peut être 28, 29, 30 ou 31 jours selon le cas ; un mois, en tant que 1/12 dune 
année, c'est entre 30,41 et 30,50 jours ; en tant que 1/48 de quatre années (3 "normales" et 
une bissextile), ça fait 30,43 jours ; si on parle en temps de travail, un mois c'est 7,04 
jours de 24 heures pour les gens qui sont à 39 heures hebdomadaire et c'est 6,31 jours de 24 
heures pour les gens à 35 heures hebdo.

Pour répondre directement à ta question, je n'ai pas connaissance d'un type de champ dédié aux 
semaines et aux mois ; mais dans le même temps, je n'en vois pas vraiment l'utilité non plus.

Ou alors je rate quelque chose...

Peut-être avec plus de précisions ?

A+

Le 09/03/2015 16:03, Eric Hoffmann a écrit :
Bonjour,

J'ai besoin de créer un champ dans une table dont le type est une durée : 1 semaine, 2 
semaines, 1 mois...
Est-ce possible ?
Je vois bien les types de champ Date, Heure ou Date/Heure, mais du type Durée.
LibreOffice 3.5.4 sous Debian

Merci.
Bonne soirée,

PS : je re-poste au format TXT, car mon précédent courriel a une forme toute pourrie !







-- 
Envoyez un mail à users+unsubscribe@fr.libreoffice.org pour savoir comment vous désinscrire
Les archives de la liste sont disponibles à http://listarchives.libreoffice.org/fr/users/
Tous les messages envoyés sur cette liste seront archivés publiquement et ne pourront pas être 
supprimés


-- 
Envoyez un mail à users+unsubscribe@fr.libreoffice.org pour savoir comment vous désinscrire
Les archives de la liste sont disponibles à http://listarchives.libreoffice.org/fr/users/
Tous les messages envoyés sur cette liste seront archivés publiquement et ne pourront pas être 
supprimés

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.