- Beiträge: 38
Kalenderwoche für Dateiname ermitteln
- Andreas Knobloch
- Autor
- Offline
- Benutzer
-
Weniger Mehr
11 Jahre 2 Wochen her #1647 von Andreas Knobloch
Mit freundlichen Grüßen
Andreas Knobloch
Kalenderwoche für Dateiname ermitteln wurde erstellt von Andreas Knobloch
Hallo Stark,
ich habe folgende Herausforderung:
Für den Dateinamen eines Exportes benötige ich die Kalenderwoche (Datum wird übergeben bzw. Vortag) im Dateinamen.
Ich bin auf dieses Skript gestoßen.
Originalartikel:
http://dotnet-snippets.de/dns/kalenderwo...nen-SID260.aspx
Leider funktioniert das Skript im Flowheater nicht. Mit dem verlinkten Originalartikel bin ich leider auch nicht weiter gekommen.
Gibt es hier eventuell eine einfachere Lösung mit Heatern? Oder ein einfacheres Skript?
Mit freundlichen Grüßen
Andreas
ich habe folgende Herausforderung:
Für den Dateinamen eines Exportes benötige ich die Kalenderwoche (Datum wird übergeben bzw. Vortag) im Dateinamen.
Ich bin auf dieses Skript gestoßen.
Code:
C#-Code: private void NumberOfWeek(DateTime dte) { #region WeekNr // Aktuelle Kultur ermitteln CultureInfo currentCulture = CultureInfo.CurrentCulture; // Aktuellen Kalender ermitteln Calendar calendar = currentCulture.Calendar; // Kalenderwoche über das Calendar-Objekt ermitteln int calendarWeek = calendar.GetWeekOfYear(dte, currentCulture.DateTimeFormat.CalendarWeekRule, currentCulture.DateTimeFormat.FirstDayOfWeek); // Überprüfen, ob eine Kalenderwoche größer als 52 // ermittelt wurde und ob die Kalenderwoche des Datums // in einer Woche 2 ergibt: In diesem Fall hat // GetWeekOfYear die Kalenderwoche nicht nach ISO 8601 // berechnet (Montag, der 31.12.2007 wird z. B. // fälschlicherweise als KW 53 berechnet). // Die Kalenderwoche wird dann auf 1 gesetzt if (calendarWeek > 52) { dte = dte.AddDays(7); int testCalendarWeek = calendar.GetWeekOfYear(dte, currentCulture.DateTimeFormat.CalendarWeekRule, currentCulture.DateTimeFormat.FirstDayOfWeek); if (testCalendarWeek == 2) calendarWeek = 1; } WeekNr = calendarWeek; // Das Jahr der Kalenderwoche ermitteln int year = dte.Year; if (calendarWeek == 1 && dte.Month == 12) year++; if (calendarWeek >= 52 && dte.Month == 1) year--; YearNr = year; }
Originalartikel:
http://dotnet-snippets.de/dns/kalenderwo...nen-SID260.aspx
Leider funktioniert das Skript im Flowheater nicht. Mit dem verlinkten Originalartikel bin ich leider auch nicht weiter gekommen.
Gibt es hier eventuell eine einfachere Lösung mit Heatern? Oder ein einfacheres Skript?
Mit freundlichen Grüßen
Andreas
Mit freundlichen Grüßen
Andreas Knobloch
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
-
- Offline
- Administrator
-
Weniger Mehr
- Beiträge: 2053
11 Jahre 2 Wochen her - 11 Jahre 2 Wochen her #1650 von FlowHeater-Team
gruß
Robert Stark
FlowHeater-Team antwortete auf Kalenderwoche für Dateiname ermitteln
Hallo Herr Knobloch,
damit das Beispiel funktioniert müssen Sie im .NET Skript Heate r noch ein zusätzliches „using System.Globalization;“ im Reiter „Erweitert“ angeben. Siehe Screenshot.
Das Skript habe ich etwas angepasst, so dass Sie dem Heater einen Datumswert übergeben können und die Kalenderwoche zurückgeliefert wird. Im Anhang befindet sich ein kleines Beispiel.
C# Code um die aktuelle Kalenderwoche zu ermitteln
damit das Beispiel funktioniert müssen Sie im .NET Skript Heate r noch ein zusätzliches „using System.Globalization;“ im Reiter „Erweitert“ angeben. Siehe Screenshot.
Das Skript habe ich etwas angepasst, so dass Sie dem Heater einen Datumswert übergeben können und die Kalenderwoche zurückgeliefert wird. Im Anhang befindet sich ein kleines Beispiel.
C# Code um die aktuelle Kalenderwoche zu ermitteln
Code:
public object DoWork() { if (InValues.Length != 1) throw new Exception("ein Eingangsparameter erwartet"); object o = InValues[0].GetDateTime(); if (o == null) return -1; // Kein Datum übergeben DateTime dt = (DateTime)o; return NumberOfWeek(dt); } private int NumberOfWeek(DateTime dte) { CultureInfo currentCulture = CultureInfo.CurrentCulture; Calendar calendar = currentCulture.Calendar; int calendarWeek = calendar.GetWeekOfYear(dte, currentCulture.DateTimeFormat.CalendarWeekRule, currentCulture.DateTimeFormat.FirstDayOfWeek); if (calendarWeek > 52) { dte = dte.AddDays(7); int testCalendarWeek = calendar.GetWeekOfYear(dte, currentCulture.DateTimeFormat.CalendarWeekRule, currentCulture.DateTimeFormat.FirstDayOfWeek); if (testCalendarWeek == 2) calendarWeek = 1; } return calendarWeek; }
gruß
Robert Stark
Anhänge:
Letzte Änderung: 11 Jahre 2 Wochen her von FlowHeater-Team.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Andreas Knobloch
- Autor
- Offline
- Benutzer
-
Weniger Mehr
- Beiträge: 38
11 Jahre 2 Wochen her #1652 von Andreas Knobloch
Mit freundlichen Grüßen
Andreas Knobloch
Andreas Knobloch antwortete auf Kalenderwoche für Dateiname ermitteln
Hallo Herr Stark,
vielen Dank für die Unterstützung. Ich habe das Skript etwas modifiziert und funktioniert super.
Mit freundlichen Grüßen
Andreas Knobloch
vielen Dank für die Unterstützung. Ich habe das Skript etwas modifiziert und funktioniert super.
Code:
bool bSetFileName = true; public object DoWork() { if (InValues.Length != 1) throw new Exception("ein Eingangsparameter erwartet"); // Dateiname nicht im Testmodus umbiegen if (bSetFileName && AdapterWrite.OnlyTest == false){ // Dateiname nur beim 1. Datensatz/Zeile ändern bSetFileName = false; // Vom Vortag die KW ermittlen DateTime vorTag = DateTime.Now.AddDays(-1); //KW ermitteln int KW = NumberOfWeek(vorTag); //Hier den Dateipfad ggf. ändern string path = @"C:\Program Files (x86)\FlowHeater\Transfer\NDC\"; // Zugriff auf den Textfile Adapter der Write Seite TextFileAdapter adapter = (TextFileAdapter)AdaptersWrite[0]; // Dateiname ändern, ggf. hier Anpassungen vornehmen! adapter.Filename = path + "FI" + vorTag.ToString("yy") + "KW" + KW + ".txt"; } // Eingangsparameter für die weitere Verarbeitung wieder zurückliefern return InValues[0].GetValue(); } private int NumberOfWeek(DateTime dte) { CultureInfo currentCulture = CultureInfo.CurrentCulture; Calendar calendar = currentCulture.Calendar; int calendarWeek = calendar.GetWeekOfYear(dte, currentCulture.DateTimeFormat.CalendarWeekRule, currentCulture.DateTimeFormat.FirstDayOfWeek); if (calendarWeek > 52) { dte = dte.AddDays(7); int testCalendarWeek = calendar.GetWeekOfYear(dte, currentCulture.DateTimeFormat.CalendarWeekRule, currentCulture.DateTimeFormat.FirstDayOfWeek); if (testCalendarWeek == 2) calendarWeek = 1; } return calendarWeek; }
Mit freundlichen Grüßen
Andreas Knobloch
Mit freundlichen Grüßen
Andreas Knobloch
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Ladezeit der Seite: 0.278 Sekunden