Benutzer mit den meisten Antworten
C# Wie kann die Kalenderwoche ermittelt und diese dann an einen Ordnername anhängen ?

Frage
-
Hallo erstmal und frohe Weihnachten!
Ich habe einen Ordner in C:\Fahrzeugdaten
Dieser soll wöchentlich mit der aktuellen Kalenderwoche versehen werden.
Beispiel: Aktuell ist die Kw 52. Der Ordner soll nun in C:\Fahrzeugdaten Kw52 umbenannt werden.
Lieben Gruß
Markus
Antworten
-
Hi Markus,
hier mal eine Konsolendemo, wie man das in VB.NET machen kann. Die Kalenderwoche kann man über Calendar ermitteln, das Verzeichnis umbenennen kann man mit Move.Imports System.Globalization Imports System.IO Module Module1 Sub Main() Try Dim c As New Demo c.Execute() Catch ex As Exception Console.WriteLine(ex.Message) End Try Console.WriteLine("weiter mit Taste") Console.ReadKey() End Sub Friend Class Demo Friend Sub Execute() Dim rootOrdner = "C:\Fahrzeugdaten" ' Vorbereitung ' Ordner "C:\Fahrzeugdaten" anlegen, wenn nicht schon vorhanden If Not Directory.Exists(rootOrdner) Then Directory.CreateDirectory(rootOrdner) ' neuen Namen des Verzeichnisses ermitteln Dim newName = $"{rootOrdner} " & CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(Now, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday).ToString ' Verzeichnis umbenennen Directory.Move(rootOrdner, newName) End Sub End Class End Module
--
Viele Grüsse
Peter Fleischer (ehem. MVP für Developer Technologies)
Meine Homepage mit Tipps und Tricks- Bearbeitet Peter Fleischer Mittwoch, 26. Dezember 2018 11:49
- Als Antwort vorgeschlagen Peter Fleischer Mittwoch, 26. Dezember 2018 11:51
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 4. Januar 2019 08:44
-
Hallo Peter,
deine Ermittlung der Kalenderwoche ist abweichend von der ISO 8601.
(Das Datum 2018.12.31 ergibt KW53, laut Kalender müsste das KW1 ergeben)
Was genau gewünscht ist, ist zwar nicht beschrieben, aber die Berechnung, die auch in Deutschland gültig ist, kann man so machen:
public static int GetIso8601WeekOfYear(DateTime time) { DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time); if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday) { time = time.AddDays(3); } return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); }
Gruß
Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP
- Als Antwort vorgeschlagen K. Pater Mittwoch, 26. Dezember 2018 14:16
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 4. Januar 2019 08:45
Alle Antworten
-
Hi Markus,
hier mal eine Konsolendemo, wie man das in VB.NET machen kann. Die Kalenderwoche kann man über Calendar ermitteln, das Verzeichnis umbenennen kann man mit Move.Imports System.Globalization Imports System.IO Module Module1 Sub Main() Try Dim c As New Demo c.Execute() Catch ex As Exception Console.WriteLine(ex.Message) End Try Console.WriteLine("weiter mit Taste") Console.ReadKey() End Sub Friend Class Demo Friend Sub Execute() Dim rootOrdner = "C:\Fahrzeugdaten" ' Vorbereitung ' Ordner "C:\Fahrzeugdaten" anlegen, wenn nicht schon vorhanden If Not Directory.Exists(rootOrdner) Then Directory.CreateDirectory(rootOrdner) ' neuen Namen des Verzeichnisses ermitteln Dim newName = $"{rootOrdner} " & CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(Now, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday).ToString ' Verzeichnis umbenennen Directory.Move(rootOrdner, newName) End Sub End Class End Module
--
Viele Grüsse
Peter Fleischer (ehem. MVP für Developer Technologies)
Meine Homepage mit Tipps und Tricks- Bearbeitet Peter Fleischer Mittwoch, 26. Dezember 2018 11:49
- Als Antwort vorgeschlagen Peter Fleischer Mittwoch, 26. Dezember 2018 11:51
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 4. Januar 2019 08:44
-
Hallo Peter,
deine Ermittlung der Kalenderwoche ist abweichend von der ISO 8601.
(Das Datum 2018.12.31 ergibt KW53, laut Kalender müsste das KW1 ergeben)
Was genau gewünscht ist, ist zwar nicht beschrieben, aber die Berechnung, die auch in Deutschland gültig ist, kann man so machen:
public static int GetIso8601WeekOfYear(DateTime time) { DayOfWeek day = CultureInfo.InvariantCulture.Calendar.GetDayOfWeek(time); if (day >= DayOfWeek.Monday && day <= DayOfWeek.Wednesday) { time = time.AddDays(3); } return CultureInfo.InvariantCulture.Calendar.GetWeekOfYear(time, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); }
Gruß
Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP
- Als Antwort vorgeschlagen K. Pater Mittwoch, 26. Dezember 2018 14:16
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Freitag, 4. Januar 2019 08:45
-
Hi Stefan,
du hast natürlich Recht. Der Unsinn der ISO 8601 sieht für 2018 aber so aus, dass zur KW 1 sowohl 1.1. -4.1.18 als auch der 31.1.18 gehören.
--
Viele Grüsse
Peter Fleischer (ehem. MVP für Developer Technologies)
Meine Homepage mit Tipps und Tricks- Bearbeitet Peter Fleischer Mittwoch, 26. Dezember 2018 14:03
-
Hallo & frohes Fest auch,
ergänzend zu den gegebenen Antworten ist es vielleicht ein Problem, wenn ein Jahr mit der KW 1 beginnt und endet (siehe z.B. 2014) oder mit KW 52 anfängt und endet (z.B. demnächst 2022). Dann würden Daten aus faktisch unterschiedlichen Wochen in ein und demselben Ordner abgelegt. Falls das also nicht gewollt ist, würde ich den Pfad noch um Jahr und Monat erweitern, z.B. 2018.01.KW01 und 2018.12.KW01.
Gruß
-
Hallo & frohes Fest auch,
ergänzend zu den gegebenen Antworten ist es vielleicht ein Problem, wenn ein Jahr mit der KW 1 beginnt und endet (siehe z.B. 2014) oder mit KW 52 anfängt und endet (z.B. demnächst 2022). Dann würden Daten aus faktisch unterschiedlichen Wochen in ein und demselben Ordner abgelegt. Falls das also nicht gewollt ist, würde ich den Pfad noch um Jahr und Monat erweitern, z.B. 2018.01.KW01 und 2018.12.KW01.
Gruß
Hallo,
du hast recht. Die KW alleine ist nicht die beste Idee. Ich erinnere mich, früher hatte ich mal einen Kunden, der wollte auch alles in Ordner nach KW gespeichert haben, war dann auch noch der Meinung, das es keine KW53 gibt. Da trat das Problem sofort beim ersten Jahreswechsel auf. Also ist für Speicherung rein nach KW die Lösung von Peter doch die bessere.
Vielleicht erzählt uns der Markus noch um was für Daten es geht. Eventuell gibt es dann noch andere Lösungsansätze (hat bei meinen Fragen sehr oft geholfen, oftmals kamen andere/bessere Lösungen dabei raus als meine Ursprungs-Idee).
Gruß und frohes Fest
Stefan
Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP
-
Also ist für Speicherung rein nach KW die Lösung von Peter doch die bessere.
Hallo Stefan,
die Lösung von Peter bleibt in gleicher Weise problematisch, beispielsweise in 2022 und 2023 beginnen die Jahre auch mit seiner Methode jeweils mit der KW 52 und enden mit der KW 52.
Die Lösung dieses Problems ist ohne Zusatzinformationen meines Erachtens nicht eindeutig darstellbar. Man könnte natürlich auch Jahresordner anlegen und bei KW 1 beispielsweise prüfen, ob der Monat 12 ist etc., um dann den passenden Jahresordner (z.B. Jahr+1) zu wählen.
Jedenfalls kann mit Jahr+Kalenderwoche ein eindeutiger Zeitraum definiert werden (auch nach ISO), der allerdings nicht immer komplett in einem Kalenderjahr liegen muss.
Gruß, Klaus
-
Hi,
Klaus' Bemerkung stimmt natürlich auch:31.12.2021 00:00:00, KW:52 Friday
01.01.2022 00:00:00, KW:52 Saturday
02.01.2022 00:00:00, KW:52 Sunday
03.01.2022 00:00:00, KW:1 Monday
31.12.2022 00:00:00, KW:52 Saturday
01.01.2023 00:00:00, KW:52 Sunday
02.01.2023 00:00:00, KW:1 Monday
03.01.2023 00:00:00, KW:1 Tuesday
31.12.2023 00:00:00, KW:52 Sunday
01.01.2024 00:00:00, KW:1 Monday
02.01.2024 00:00:00, KW:1 Tuesday
03.01.2024 00:00:00, KW:1 Wednesday
31.12.2024 00:00:00, KW:53 Tuesday
01.01.2025 00:00:00, KW:1 Wednesday
02.01.2025 00:00:00, KW:1 Thursday
03.01.2025 00:00:00, KW:1 Friday--
Viele Grüsse
Peter Fleischer (ehem. MVP für Developer Technologies)
Meine Homepage mit Tipps und Tricks -
Danke für das ganze Feedback.
Der Ordner Fahrzeugdaten wird von mir angelegt. Da kommen dann verschiedene Daten rein die gesichert werden.
Zusätzlich wird nach jedem Daten sichern der Ordner mit der aktuellen Kalenderwoche versehen. Also C:\Fahrzeugdaten Kw 52
C:\Fahrzeugdaten Kw 53
usw.
Das wiederholt sich dann jede Woche. Ein Ordner mit Fahrzeugdaten wird erneut angelegt mit neuen Daten, die dann im Anschlus der Sicherung mit der nächsten Kalenderwoche versehen werden.
Vielen lieben Dank für eure Hilfe. :-))