Jeder kennt eine einfache Möglichkeit, das Datum des ersten Tages in der Woche zu ermitteln (Montag hier in Europa). Ich kenne das Jahr und die Wochennummer? Ich werde das in C # machen.
c#
.net
week-number
Bobby
quelle
quelle
Antworten:
Ich hatte Probleme mit der Lösung von @HenkHolterman, sogar mit dem Fix von @RobinAndersson.
Das Lesen des ISO 8601-Standards löst das Problem gut. Verwenden Sie den ersten Donnerstag als Ziel und nicht den Montag. Der folgende Code funktioniert auch für Woche 53 von 2009.
quelle
Ich mag die Lösung von Henk Holterman. Aber um ein bisschen kulturunabhängiger zu sein, muss man den ersten Tag der Woche für die aktuelle Kultur bekommen (es ist nicht immer Montag):
quelle
firstMonday
ist ein schlechter Variablenname für etwas, das möglicherweise kein Montag ist. =)UPDATE : .NET Core 3.0 und .NET Standard 2.1 wurden mit diesem Typ ausgeliefert.
Gute Nachrichten! Eine Pull-Anfrage, die
System.Globalization.ISOWeek
zu .NET Core hinzugefügt wurde , wurde gerade zusammengeführt und ist derzeit für die Version 3.0 vorgesehen. Hoffentlich wird es in nicht allzu ferner Zukunft auf die anderen .NET-Plattformen übertragen.Sie sollten in der Lage sein, die
ISOWeek.ToDateTime(int year, int week, DayOfWeek dayOfWeek)
Methode zu verwenden, um dies zu berechnen.Den Quellcode finden Sie hier .
quelle
Am einfachsten ist es wahrscheinlich, den ersten Montag des Jahres zu finden und dann die entsprechende Anzahl von Wochen hinzuzufügen. Hier ist ein Beispielcode. Es wird übrigens eine Wochennummer angenommen, die bei 1 beginnt:
quelle
Persönlich würde ich die Kulturinformationen nutzen, um den Wochentag zu ermitteln und zum ersten Wochentag der Kultur zurückzukehren. Ich bin mir nicht sicher, ob ich es richtig erkläre. Hier ein Beispiel:
quelle
Verwenden von Fluent DateTime http://fluentdatetime.codeplex.com/
quelle
Gemäß ISO 8601: 1988 , die in Schweden verwendet wird, ist die erste Woche des Jahres die erste Woche mit mindestens vier Tagen innerhalb des neuen Jahres.
Wenn Ihre Woche also an einem Montag beginnt, liegt der erste Donnerstag eines Jahres innerhalb der ersten Woche. Sie können DateAdd oder DateDiff daraus.
quelle
Angenommen, die Wochennummer beginnt bei 1
Dies sollte Ihnen den ersten Tag in einer bestimmten Woche geben. Ich habe nicht viel getestet, aber es sieht so aus, als ob es funktioniert. Es ist eine kleinere Lösung als die meisten anderen, die ich im Web gefunden habe, also wollte ich sie teilen.
quelle
new DateTime(1,1,YearNumber)
Die freie Zeitperiode Bibliothek für .NET enthält die ISO - 8601 - Klasse entsprechen Woche :
quelle
Dieser hat bei mir funktioniert, er hat auch den Vorteil, dass er eine Kultur als Parameter erwartet, um die Formel mit verschiedenen Kulturen zu testen. Wenn leer, werden die aktuellen Kulturinformationen angezeigt. Gültige Werte sind: "it", "en-us", "fr", ... und so weiter. Der Trick besteht darin, die Wochennummer des ersten Tages des Jahres zu subtrahieren, dh 1, um anzuzeigen, dass der erste Tag innerhalb der ersten Woche liegt. Hoffe das hilft.
quelle
Hier ist eine Methode, die mit den Wochenzahlen von Google Analytics kompatibel ist, sowie das gleiche Nummerierungsschema, das wir intern bei Intel verwendet haben und das sicher auch in vielen anderen Kontexten verwendet wird.
quelle
Ich habe einige der oben genannten Codes ausprobiert und einige haben kleine Fehler. Wenn Sie verschiedene Jahre mit unterschiedlichen Starttagen der Woche ausprobieren, werden Sie sie sehen. Ich habe den Code von Jon Skeet genommen, ihn behoben und es funktioniert, sehr einfacher Code.
quelle
Leicht geänderter Mikael Svenson Code. Ich fand die Woche des ersten Montags und änderte entsprechend die Wochennummer.
quelle
Woche 1 ist definiert als die Woche, die an einem Montag beginnt und den ersten Donnerstag des Jahres enthält.
quelle
Informationen zum Konvertieren in beide Richtungen finden Sie hier: Wikipedia-Artikel zu ISO-Wochentagen
quelle
Ich habe die Lösung von Thomas mit einem Override ein wenig verbessert:
Ansonsten lag das Datum um eine Woche vor.
Danke Thomas, große Hilfe.
quelle
Ich habe eine der Lösungen verwendet, aber sie hat zu falschen Ergebnissen geführt, einfach weil der Sonntag als erster Tag der Woche gilt.
Ich habe mich verändert:
zu:
und jetzt wirkt es wie ein Zauber.
quelle
Die vorgeschlagene Lösung ist nicht vollständig - sie funktioniert nur für CalendarWeekRule.FirstFullWeek. Andere Arten von Wochenregeln funktionieren nicht. Dies kann anhand dieses Testfalls gesehen werden:
quelle
Ich habe eine verfeinerte Version der vorgeschlagenen Lösung erstellt, die einfacher ist und den ersten Tag der Woche parametrisiert:
quelle
Dies ist meine Lösung, wenn wir ein Datum für ein bestimmtes Jahr, eine bestimmte Wochennummer und einen bestimmten Wochentag berechnen möchten.
quelle
Ich habe den von Mikael Svensson bereitgestellten Code vereinfacht, der für viele Länder in Europa korrekt ist.
quelle
Ich habe den folgenden Code geschrieben und getestet und funktioniert für mich einwandfrei. Bitte lassen Sie mich wissen, wenn jemand Probleme damit hat. Ich habe auch eine Frage gestellt, um die bestmögliche Antwort zu erhalten. Jemand könnte es nützlich finden.
quelle
GetFirstDateOfWeekByWeekNumber(2020, 29)
für Woche 29 von 2020 kehrt dies zurück07/20/2020
. Aber der erste Tag der 29. Woche war07/13/2020
Derzeit gibt es keine C # -Klasse, die ISO 8601-Wochen-Nummern korrekt verarbeitet. Obwohl Sie eine Kultur instanziieren, nach dem nächsten suchen und das korrigieren können, ist es meiner Meinung nach besser, die vollständige Berechnung selbst durchzuführen:
quelle