- Beiträge: 38
Kalenderwoche für Dateiname ermitteln
- Andreas Knobloch
- Autor
- Offline
- Benutzer
Weniger
Mehr
10 Jahre 6 Monate 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
10 Jahre 6 Monate her - 10 Jahre 6 Monate her #1650
von FlowHeater-Team
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
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
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Anhänge:
Letzte Änderung: 10 Jahre 6 Monate her von FlowHeater-Team.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Andreas Knobloch
- Autor
- Offline
- Benutzer
Weniger
Mehr
- Beiträge: 38
10 Jahre 6 Monate 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.266 Sekunden