Calculer le début et date de fin d'une semaine étant donné le numéro de la semaine et de l'année en C# (basée sur la spécification ISO)
J'ai besoin de générer un rapport qui montre les 52 semaines d'une année (ou 53 semaines quelques années) et à leur début et date de fin. Il y a un ISO spec pour ce faire, mais semble terriblement compliqué!!! Im espérant que quelqu'un connait un moyen de le faire en C# ou Visual Basic (sa en fait pour Visual Basic 6, mais je vais essayer de port à travers)
OriginalL'auteur | 2009-08-04
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
Calendar.GetWeekOfYear
méthode pour obtenir le numéro de semaine d'une date, avec laCalendarWeekRule.FirstFourDayWeek
valeur pour spécifier la façon dont les semaines sont déterminées, etDayOfWeek.Monday
pour spécifier le premier jour de la semaine. Qui suit la spécification ISO.Exemple:
Pour obtenir la date du premier jour de la première semaine de l'année, vous pouvez commencer à partir du 4 janvier et revenir jusqu'à ce que vous trouver le lundi:
Que dois-je utiliser pour Importer le Calendrier de la bibliothèque? Par défaut, le Calendrier n'est pas défini, donc j'ai besoin de l'Importer à partir de quelque part, mais où?
Si vous cochez la référence pour le Calendrier de la classe msdn.microsoft.com/en-us/library/... vous voyez que c'est dans la
System.Globalization
espace de noms, de sorte que l'espace de noms que vous voulez importer. C'est dans lemscorlib.dll
assemblée, vous n'avez pas à ajouter de toute référence.+1 Merci @Guffa, j'ai trouvé moi-même trop. Donc, l'utilisation de la solution, je voudrais 1) instancier une instance d'une classe héritant de l'abstrait Calendrier de la classe, par exemple:
GregorianCalendar
comme c'est le standard de facto:Dim myCalendar As Calendar = New GregorianCalendar
puis 2) Utiliser l'instanceDim week As Integer = myCalendar.GetWeekOfYear(DateTime.Today, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday)
Oui, ça ressemble à droite. Je me suis souvenu de la méthode à être statique, mais la vérification de la référence que je vois qu'il ne l'est pas.
OriginalL'auteur Guffa
Si vous voulez le faire manuellement, jetez un oeil à ce post.
Urgh, qui est en fait le méchant peu de code. Même si vous pour une raison quelconque, voulait retourner qu'un seul type primitif (mauvaise idée omi), alors vous devriez utiliser les binaires
&
et décalage à droite des opérations plutôt que la division et le modulo.OriginalL'auteur Max
Cela devrait fonctionner. Je l'ai utilisé sur la présentation de rapports dans le passé. Je suis d'accord que c'est pas très jolie:
Qui calcule la date de début pour une semaine donnée. La fin DateTime est évidemment 7 jours plus tard (exclusif).
Vous pouvez trouver ce code de la mine utile. C'est à peine documenté, mais il met en œuvre quelques autres opérations sur le WeekAndYear struct qu'il définit. Beaucoup de place pour l'amélioration. Plus particulièrement, il définit
<
et>
opérateurs, mais pas d'autres, ce qui est assez mauvais... mais il devrait vous obtenir a commencé.Portage à VB6... Hmm, peut-être pas 😛
OriginalL'auteur Thorarin
Ces fonctions visées à mes exigences (adapté pour les ASP Classique, donc à des types de données)
Espérons qu'ils aider les autres aussi...
OriginalL'auteur
utiliser le Calendrier.GetWeekOfYear méthode pour obtenir la semaine de l'actuel datetime, le reste doit être trivial.
Pour vb6 c'est moins trivial, vous êtes meilleur pari est de trouver une bonne bibliothèque qui fait le travail dur pour vous.
OriginalL'auteur Paul van Brenk
Cela vous donnera le début de la semaine en cours
Pour obtenir la fin de la semaine ajouter 7 jours pour le début de la semaine
OriginalL'auteur Garreth O Mahony
Système.De la mondialisation.Calendrier.GetWeekOfYear
OriginalL'auteur Matt Howells