Project

General

Profile

Évolution #1405

[DateExtensions] : conversion n° semaine

Added by Sankasssss about 8 years ago. Updated almost 8 years ago.

Status:
Fermé
Priority:
Bas
Assignee:
Category:
Fonctionnalités
Target version:
Start date:
09/14/2011
Due date:
% Done:

100%

Estimated time:
1.00 h
Spent time:

Description

Bonjour,

Suite à ce post : http://www.developpez.net/forums/d1131136/dotnet/langages/vb-net/probleme-mois/#post6239176
j'ai regardé dans la librairie après des méthodes sur le n° de semaine mais je n'ai rien trouvé.
Je me demandais si se ne serais pas intéressant de les rajouter dans DateExtensions : http://dvp-net.developpez.com/doc/html/Methods_T_Developpez_Dotnet_DateExtensions.htm

P.S. : Félicitation à vous tous pour ce projet ;)

History

#1 Updated by Sankasssss about 8 years ago

Je me suis apparemment trompé à la création de la demande, il ne s'agit pas d'un Bogue mais d'une évolution, je n'ai pas la possibilité de modifier cela maintenant.
Désolé, c'est mes premiers pas sur RedMine :D

#2 Updated by tomlev about 8 years ago

De mémoire, il y à déjà un truc comme ça dans le .NET Framework... mais là je suis en vacances, je peux pas vérifier. Cherche "GetWeekOfYear" ou quelque chose comme ça sur MSDN

#3 Updated by Sankasssss about 8 years ago

J'ai été voir la fonction GetWeekOfYear

Retourne la semaine de l'année qui contient la date du DateTime spécifié.

mais il s'agit de l'inverse de la fonction GetFirstDayOfWeek ;)

J'ai regardé sur MSDN et il n'existe apparemment pas de fonction MSDN pour avoir un jour via un numéro de semaine...

#4 Updated by tomlev about 8 years ago

OK... je suis pas sûr d'avoir compris quel était le problème à résoudre alors
Tu veux obtenir quoi au juste ? La date du 1er jour de la semaine N ?

#5 Updated by Sankasssss about 8 years ago

C'est bien cela :)

#6 Updated by tomlev about 8 years ago

  • Tracker changed from Bogue to Évolution

#7 Updated by tomlev about 8 years ago

En fait c'est assez complexe à faire correctement... la solution proposée dans la discussion que tu cites ne fonctionne pas pour le cas général, mais seulement pour le cas particulier où on considère que la semaine 1 commence le premier janvier (CalendarWeekRule.FirstDay). Il y a d'autres règles en vigueur selon le contexte :
  • premier jour de l'année : la semaine 1 commence le premier janvier
  • première semaine complète : la semaine 1 commence le premier lundi de l'année (ou le premier X de l'année, X étant le premier jour de la semaine, qui change aussi selon les pays et/ou le contexte)
  • première semaine de 4 jours : la semaine 1 est celle qui contient le premier jeudi de l'année (ou le premier 4e jour de la semaine, selon la culture). C'est la recommandation de l'ISO

Bref, c'est pas forcément aussi simple que ça en a l'air... Je vais y réfléchir en tous cas ;)

#8 Updated by tomlev about 8 years ago

  • Category set to Fonctionnalités
  • Status changed from Nouveau to Résolu
  • Assignee set to tomlev
  • Target version set to 0.5 beta
  • % Done changed from 0 to 100
  • Estimated time set to 1.00 h

C'est fait :)

Nettement plus galère que je pensais en fait, à cause des différentes règles et du premier jour de la semaine qui change selon la culture. J'ai plusieurs fois essayé et abandonné parce qu'il y avait toujours des cas où ça donnait pas le bon résultat, mais j'ai fini par y arriver...

Je savais pas trop où mettre ça, donc je l'ai mis dans DateExtensions, bien que ce ne soit pas une méthode d'extension. Ca s'utilise comme ça :

// Début de la semaine 42 de l'année 2000
DateTime startOfWeek = DateExtensions.StartOfWeek(2000, 42);

On peut aussi préciser la règle de calcul du numéro de semaine (CalendarWeekRule) et le premier jour de la semaine, par défaut ça prend ceux de la culture courante (en français : 1ere semaine de 4 jours, la semaine commence le lundi)

Les tests unitaires vérifient environ 13000 combinaisons de paramètres, en comparant avec le résultat de Calendar.GetWeekOfYear, donc ça devrait être à peu près fiable ;)

#9 Updated by Sankasssss about 8 years ago

Héhé félicitation t'es un pro :D

#10 Updated by tomlev almost 8 years ago

  • Status changed from Résolu to Fermé

Also available in: Atom PDF