myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
   » Plugin für Firefox
   » Plugin für IE
   » Gadget für Windows
» Regeln
» Wie poste ich richtig?
» Datenschutzerklärung
» wbb-FAQ

Mitglieder
» Liste / Suche
» Stadt / Anleitung dazu
» Wer ist wo online?

Angebote
» ASP.NET Webspace
» Bücher
» Zeitschriften
   » dot.net magazin

Ressourcen
» guide to C#
» openbook: Visual C#
» openbook: OO
» MSDN Webcasts
» Search.Net

Team
» Kontakt
» Übersicht
» Wir über uns
» Impressum

» Unsere MiniCity
MiniCity
» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Basistechnologien und allgemeine .NET-Klassen » Arbeitszeitberechnung: Wie Zeiten sinnvoll zerlegen und prüfen?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Arbeitszeitberechnung: Wie Zeiten sinnvoll zerlegen und prüfen?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
schnurzli schnurzli ist männlich
myCSharp.de-Mitglied

Dabei seit: 03.04.2006
Beiträge: 34
Entwicklungsumgebung: .NET


schnurzli ist offline

Arbeitszeitberechnung: Wie Zeiten sinnvoll zerlegen und prüfen?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo allerseits,

ich habe eine eine grunsätzliche Frage zur Logik zum Thema DateTime und dem sinnvollen Abarbeiten von Berechnungen.

Ein Beispiel.
Ich habe eine von und eine bis Zeit. Diese kann sowohl am selben Tag als auch am darauffolgenden Tag sein.

Beispiel: Ich definiere zwei Zeiten für von und bis.

C#-Code:
DateTime zeitvon = DateTime.Parse("22.01.2019 05:45");
DateTime zeitbis = DateTime.Parse("22.01.2019 10:00");

Nun würde ich gerne bestimmte Kriterien prüfen. Und da diese im 15 Minuten Takt sein kann, würde ich die Zeiten in 15 Minuten Bündel zerlegen.
In etwa so:

C#-Code:
while (zeitvon <= zeitbis) {
      System.Console.WriteLine(zeitvon.ToShortTimeString());
      zeitvon = zeitvon.AddMinutes(15);
}

Danach habe ich Parameter in Form eines DateTime Feldes, die eine Grenze vorgeben.
Beispiel:

C#-Code:
DateTime grenzebeginn= DateTime.Parse("01.01.1900 05:00");
DateTime grenzeende= DateTime.Parse("01.01.1900 06:00");

Und dann prüfe ich mit if einfach in while auf Erreichen der Grenze.

Ist das ein prkatikabler Weg, um ans Ziel zu kommen oder bin ich total auf dem Holzweg?
Fertige Klassen gibt es für so eine Logik nicht - ich habe zumindest keine gefunden.

LG Schnurzli
23.01.2019 17:52 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.144
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Was willst du den erreichen?
Aktuell ist dies weder aus deinem Code noch deinem Text zu entnehmen.

Du kannst auch mit DateTime direkt rechnen, falls die an die Zeispanne zwischen einem Von/Bis Datum kommen willst.
Dann erhälst du dein TimeSpan Objekt, was dann die Zeitspanne zwischen deinem Von/Bis Datum enthält.

Aber ohne klaren Weg, was du damit erreichen willst, kann man dir nicht helfen.

T-Virus
23.01.2019 18:06 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
schnurzli schnurzli ist männlich
myCSharp.de-Mitglied

Dabei seit: 03.04.2006
Beiträge: 34
Entwicklungsumgebung: .NET

Themenstarter Thema begonnen von schnurzli

schnurzli ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hi,

danke für deine rasche Rückmeldung. Ich möchte bestimmte Zeitgrenzen eingeben.
Ziel ist es, einen Tarifvertrag zu prüfen. Es geht um Arbeitszeit. Wenn man nun eine Arbeitszeit von - bis hat, möchte ich diese dann überprüfen.

Ich bin in meiem Beispiel nun schon ein wenig fortgeschrittener. Arbeitszeit ist wirklich etwas komplex Das lerne ich gerade :-) Ich bin aber über jeden Ansatz und Optimierungsvorschlag erfreut :-)

Mein Ansatz: ich sammle in meiner Funktion sinnbildlich einmal alle meine Arbeitszeiten von einem Arbeitstag:

C#-Code:
DateTime[,] ZeitenMo = {
                {  DateTime.Parse("22.01.2019 05:45"), DateTime.Parse("22.01.2019 09:00") },
                {  DateTime.Parse("22.01.2019 09:30"), DateTime.Parse("22.01.2019 15:00") }
            };

Danach baue ich mir ein paar Funktionen für die einzelnen Prüfungen und versuche immer Summen zu bilden. Als erstes habe ich nun begonnen mir eine Funktion für die Gesamtsumme zu bauen. Die Funktion ist dann meine Ist-Summe. Nun prüfe ich, ob die Zeit einen bestimmten Wert des Tages überschreitet. Wenn das passiert, würde ich eine weitere Funktion erstellen, die diese Grenze prüft- Alle Zeiten darüber sind in meinem Beispiel dann Überstunden (Größer 8 Stunden) Da dies aber eigentlich im 15 Minuten Takt passieren kann (In meinem Beispiel ist dann ab 14:00 - 15:00 - also vier 15 Minuten Pakete schon als eine Überstunde zu markieren. Die 15 Minuten vor 6:00 würden dann in die Tarif Nacht fallen und würden auch zu einer Überstunde werden.

Es kommt dann noch eine Prüfung, ob die Stunde am Feiertag passiert oder am Sonntag... Aber im Wesentlichen immer dieselbe Logik in meinem Ansatz.

Und meine urspürngliche Frage war eben, ob dieser Ansatz sinnvoll für eine Prüfung ist oder ob es für eine Prüfung von Zeiten und der Grenzen eines Parameters eine bessere Lösung gibt.

LG Schnurzli

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von schnurzli am 23.01.2019 18:50.

23.01.2019 18:47 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
T-Virus T-Virus ist männlich
myCSharp.de-Mitglied

Dabei seit: 17.04.2008
Beiträge: 1.144
Entwicklungsumgebung: Visual Studio, Codeblocks, Edi
Herkunft: Nordhausen, Nörten-Hardenberg


T-Virus ist offline Füge T-Virus Deiner Kontaktliste hinzu

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Du kannst im DateTime mit TimeOfDay prüfen deine Zeiten vor oder nach einer bestimmten Tageszeit liegen.
Hier musst du dir ein TimeSpan als Vergleichsbjekt anlegen.
Hier helfen dir die From* Methoden von TimeSpan.
Um z.B. einen TimeSpan um 6 Uhr zu erhalten, brauchst du TimeSpan.FromHours(6).
Du kannst dann damit arbeiten.

Bsp:

C#-Code:
DateTime zeitstempel = DateTime.Now;
TimeSpan sechsUhr = TimeSpan.FromHours(6);

if(zeitstempel.TimeOfDay > sechsUhr)
{
    Console.WriteLine("Es ist nach 6 Uhr");
}
else if(zeitstempel.TimeOfDay == sechsUhr)
{
    Console.WriteLine("Es ist exakt 6 Uhr");
}
else
{
    Console.WriteLine("Es ist vor 6 Uhr");
}

Links:
 https://docs.microsoft.com/de-de/dotnet/...framework-4.7.2
 https://docs.microsoft.com/de-de/dotnet/...framework-4.7.2

Dies dürfte dir bei der Umsetzung sehr helfen :)

Nachtrag:
Du musst bei DateTime aber beachten, dass diese keine Feiertage kennt.
Diese müsstest du noch in deinem Projekt einpflegen als entsprechende Klasse.
Aber im großen und ganzen sollte es mit etwas Lernaufwand bei DateTime/TimeSpan keine zu große Sache sein.

T-Virus

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von T-Virus am 23.01.2019 19:35.

23.01.2019 19:32 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

images/avatars/avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.380
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Zitat von T-Virus:
Du kannst im DateTime mit TimeOfDay prüfen deine Zeiten vor oder nach

Dafür alleine braucht man prinzipiell kein TimeOfDay. Das geht auch mit der Hour-Property.
Der Vorteil ist eben, dass man bei TimeOfDay Tagesunabhängig kalkulieren kann - also ohne das Datum.

Das Problem von TimeOfDay ist jedoch - je nachdem was man damit machen will - wenn man Tagesübergreifend (zB Nachtschicht) Arbeitszeiten kalkulieren will.
Dann ist das Datum wichtig und TimeOfDay eher eine Behinderung.
23.01.2019 22:57 Beiträge des Benutzers | zu Buddylist hinzufügen
schnurzli schnurzli ist männlich
myCSharp.de-Mitglied

Dabei seit: 03.04.2006
Beiträge: 34
Entwicklungsumgebung: .NET

Themenstarter Thema begonnen von schnurzli

schnurzli ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Guten Morgen,

danke für euren Input.

Ich baue meine Funktionen heute einmal zusammen und poste euch dann meinen Versuch.

@Abt: Ja es ist leider auch tagesübergreifend. Aber dafür nehmne ich nun das DateTimefeld komplett anstatt nur die Zeit zu berücksichtigen.

LG
24.01.2019 07:25 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als ein Monat.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team. Alle Rechte vorbehalten. 23.02.2019 05:39