Tout le monde connaît un moyen facile d'obtenir la date du premier jour de la semaine (lundi ici en Europe). Je connais l'année et le numéro de la semaine? Je vais le faire en C #.
c#
.net
week-number
Policier
la source
la source
Réponses:
J'ai eu des problèmes avec la solution de @HenkHolterman même avec le correctif de @RobinAndersson.
La lecture de la norme ISO 8601 résout bien le problème. Utilisez le premier jeudi comme cible et non le lundi. Le code ci-dessous fonctionnera également pour la semaine 53 de 2009.
la source
J'aime la solution fournie par Henk Holterman. Mais pour être un peu plus indépendant de la culture, il faut avoir le premier jour de la semaine pour la culture actuelle (ce n'est pas toujours lundi):
la source
firstMonday
est un mauvais nom de variable pour quelque chose qui pourrait ne pas être un lundi. =)METTRE À JOUR : .NET Core 3.0 et .NET Standard 2.1 sont livrés avec ce type.
Bonnes nouvelles! Une pull request ajoutant
System.Globalization.ISOWeek
à .NET Core vient d'être fusionnée et est actuellement prévue pour la version 3.0. Espérons qu'il se propagera aux autres plates-formes .NET dans un avenir pas trop lointain.Vous devriez pouvoir utiliser le
ISOWeek.ToDateTime(int year, int week, DayOfWeek dayOfWeek)
méthode pour calculer cela.Vous pouvez trouver le code source ici .
la source
Le moyen le plus simple est probablement de trouver le premier lundi de l'année, puis d'ajouter le nombre de semaines pertinent. Voici un exemple de code. Il suppose un numéro de semaine commençant à 1, soit dit en passant:
la source
Personnellement, je profiterais des informations sur la culture pour obtenir le jour de la semaine et revenir au premier jour de la semaine de la culture. Je ne sais pas si je l'explique correctement, voici un exemple:
la source
en utilisant Fluent DateTime http://fluentdatetime.codeplex.com/
la source
Selon la norme ISO 8601: 1988 utilisée en Suède, la première semaine de l'année est la première semaine qui compte au moins quatre jours dans la nouvelle année.
Donc, si votre semaine commence un lundi, le premier jeudi de chaque année est dans la première semaine. Vous pouvez DateAdd ou DateDiff à partir de cela.
la source
En supposant que le numéro de semaine commence à 1
Cela devrait vous donner le premier jour d'une semaine donnée. Je n'ai pas fait beaucoup de tests dessus, mais il semble que cela fonctionne. C'est une solution plus petite que la plupart des autres que j'ai trouvées sur le Web, je voulais donc la partager.
la source
new DateTime(1,1,YearNumber)
La bibliothèque de périodes de temps gratuite pour .NET comprend la semaine de classe conforme ISO 8601 :
la source
Celui-ci a fonctionné pour moi, il a aussi l'avantage d'attendre un cultureinfo comme paramètre pour tester la formule avec différentes cultures. S'il est vide, il obtient les informations de culture actuelles ... les valeurs valides sont comme: "it", "en-us", "fr", ... et ainsi de suite. L'astuce consiste à soustraire le numéro de semaine du premier jour de l'année, qui peut être 1 pour indiquer que le premier jour se situe dans la première semaine. J'espère que cela t'aides.
la source
Voici une méthode compatible avec les numéros de semaine que Google Analytics, ainsi que le même schéma de numérotation que nous avons utilisé en interne chez Intel, et qui, j'en suis sûr, est également utilisé dans de nombreux autres contextes.
la source
J'ai essayé quelques codes ci-dessus et certains ont de petites erreurs, quand vous essayez différentes années avec différents jours de départ de la semaine, vous les verrez, j'ai pris le code de Jon Skeet, corrigez-le et ça marche, code très simple.
la source
Code Mikael Svenson légèrement modifié. J'ai trouvé la semaine du premier lundi et changer le numéro de la semaine.
la source
La semaine 1 est définie comme étant la semaine qui commence un lundi et contient le premier jeudi de l'année.
la source
Pour convertir dans les deux sens, voir ici: article Wikipedia sur les dates de semaine ISO
la source
J'ai amélioré un peu la solution de Thomas avec un remplacement:
Sinon, la date précédait d'une semaine.
Merci Thomas, une aide précieuse.
la source
J'ai utilisé l'une des solutions, mais elle m'a donné de mauvais résultats, simplement parce qu'elle compte le dimanche comme premier jour de la semaine.
J'ai changé:
à:
et maintenant cela fonctionne comme un charme.
la source
La solution proposée n'est pas complète - elle ne fonctionne que pour CalendarWeekRule.FirstFullWeek. Les autres types de règles hebdomadaires ne fonctionnent pas. Cela peut être vu en utilisant ce cas de test:
la source
J'ai fait une version raffinée de la solution proposée qui est plus simple et paramétre le firstDayOfWeek:
la source
c'est ma solution quand on veut calculer une date donnée année, numéro de semaine et jour de la semaine.
la source
J'ai simplifié le code fourni par Mikael Svensson qui est correct pour de nombreux pays d'Europe.
la source
J'ai écrit et testé le code suivant et fonctionne parfaitement bien pour moi. S'il vous plaît laissez-moi savoir si quelqu'un rencontre des problèmes avec cela, j'ai également publié une question afin d'obtenir la meilleure réponse possible. Quelqu'un peut le trouver utile.
la source
GetFirstDateOfWeekByWeekNumber(2020, 29)
pour la semaine 29 de 2020, cela revient07/20/2020
. Mais le premier jour de la 29e semaine était07/13/2020
Actuellement, il n'existe aucune classe C # qui gère correctement les numéros de semaine ISO 8601. Même si vous pouvez instancier une culture, rechercher la chose la plus proche et corriger cela, je pense qu'il est préférable de faire le calcul complet vous-même:
la source