Ich habe Aufgaben, die in einen Kalender eingefügt werden:
Lass mich nun einen Zusammenhang geben: Jeder Tag dauert hier 7,5 Stunden. Aber ich arbeite mit einer Variablen namens DayHours (die gerade 7,5 ist). (DayHours wird auch in Locked Time verwendet, die unten beschrieben werden).
Das Ziel dieses Kalenders ist es, 7,5 Stunden Arbeitstage für Mitarbeiter zu planen.
Was ich brauche, ist ein Algorithmus, der mir korrekt sagen kann, wie viele Stunden tatsächlich an einem Tag belegt sind.
Das scheint einfach, aber ist eigentlich ziemlich rekursiv.
Zuerst ein paar Notizen. Sie werden bemerken, Case Manager, um 14 Uhr, könnte in 2 Tagen von 7,5 Stunden mit 1 Stunde Rest erledigt werden. Es ist auf 3 Tage gestreckt, weil 1. Zeitplan, ist 5 Stunden lang, und 2. kann nicht gestartet werden, bis die Vorgängeraufgaben des Tages abgeschlossen sind.
Es gibt auch das Konzept der gesperrten Zeit. In lila ist die gesperrte Zeit. Dies ist ein 10-Stunden Block der Sperrzeit. Das heißt, am 12. kann ich nur (7.5 - 7.5) Arbeitsstunden machen, und Montag, nur (7.5 - 2.5) auch.
Ich habe bereits eine Funktion, um die verfügbaren Stunden eines aktuellen Tages zu berechnen, um dies zu berücksichtigen:
%Vor%Es gibt auch das Konzept der Carry-Stunden.
Hier ist ein Beispiel:
Nehmen wir nun Donnerstag den 18. (Der 18. hat 1. Fall):
Um die Anzahl der Stunden zu ermitteln, die dieser Tag für diesen Mitarbeiter hat, müssen wir uns zuerst die Aufgaben ansehen, die an diesem Tag beginnen, enden oder enden.
Ich weiß nicht, wie viele Stunden ich am 18. machen kann, weil die Aufgabe, die an diesem Tag endete, vielleicht Stunden gehabt hat. Also schaue ich den Starttag des Komponententests an. Ich kann das nicht herausfinden, entweder weil NWDM an diesem Tag fertig ist und vielleicht Stunden hat.
Also jetzt gehe ich NWDM bewerten. Ahh, dieser hat an diesem Tag nichts zu Ende, daher weiß ich, dass Schedule 5 / 7,5 Stunden zur Verfügung steht.
Also mache ich weiter und füge jeden Tag 7,5 Stunden hinzu.
Dann komme ich zum letzten Tag von NWDM. Bis dahin habe ich 5 + 7,5 + 7,5 + 7,5 Stunden daran gearbeitet,
Also habe ich 27,5 Stunden eingeplant, also werde ich am 22. Platz (30 - 27,5 = 2,5 Stunden) einlegen, um es zu beenden. So habe ich noch 5 Stunden Zeit, um an Unit Tests zu arbeiten.
Dies bedeutet, dass ich 1.5h brauche, um es zu beenden. Jetzt ist Case 1 Stunde lang.
Wäre Fall 7,5 - 1,5 oder mehr gewesen, sagen wir, dass der Tag voll ist und DayHours zurückkehrt.
Deshalb sind wir fertig. Der Rückgabewert ist 1,5 + 1 = 2,5.
Die Funktion sollte ein bisschen wie diese aussehen:
%Vor%Um die Ereignisse zu erhalten, die an einem bestimmten Tag beginnen, enden oder fallen, verwende ich:
%Vor%Der Zeitplan hat die folgenden relevanten Felder:
%Vor%Der Zeitplan sieht ungefähr so aus:
%Vor%Könnte mir jemand bei der Entwicklung eines Algorithmus helfen, der das kann?
Obwohl Ihre Frage sehr komplex und nicht sehr klar erklärt ist, werde ich versuchen, sie zu beantworten. Oder präzisieren Sie, wie Sie es zerlegen und lösen sollten (oder wie ich es lösen würde).
Was ich brauche, ist ein Algorithmus, der mir korrekt sagen kann, wie viele Stunden tatsächlich an einem Tag belegt sind.
Zuerst sehe ich das wirkliche Problem nicht, wenn Sie DateTo
-Wert für Schedule
haben. Es sei denn es entspricht DateFrom
+ Hours
. In diesem Fall wird nicht der reale DateTo
-Wert, sondern ein irrelevanter Wert angezeigt.
Ich nehme an, dass Schedule
durch die Startzeit DateFrom
und die Dauer Hours
definiert ist. DateTo
ist ein berechneter Wert und effizientes Rechnen ist der eigentliche Kern des Problems.
Also denke ich, dass diese Funktion, die Stunden in jedem Zeitbereich verfügbar macht, ziemlich einfach ist. Im Pseudocode sprechen:
%Vor% Sie benötigen möglicherweise einige Anpassungen, da DateTime
normale 24-Stunden-Tage erwartet.
Obwohl Ihre Frage sehr komplex und nicht sehr klar erklärt ist, werde ich versuchen, sie zu beantworten. Oder präzisieren Sie, wie Sie es zerlegen und lösen sollten (oder wie ich es lösen würde).
Was ich brauche, ist ein Algorithmus, der mir korrekt sagen kann, wie viele Stunden tatsächlich an einem Tag belegt sind.
Zuerst sehe ich das wirkliche Problem nicht, wenn Sie %code% -Wert für %code% haben. Es sei denn es entspricht %code% + %code% . In diesem Fall wird nicht der reale %code% -Wert, sondern ein irrelevanter Wert angezeigt.
Ich nehme an, dass %code% durch die Startzeit %code% und die Dauer %code% definiert ist. %code% ist ein berechneter Wert und effizientes Rechnen ist der eigentliche Kern des Problems.
Also denke ich, dass diese Funktion, die Stunden in jedem Zeitbereich verfügbar macht, ziemlich einfach ist. Im Pseudocode sprechen:
%Vor%Sie benötigen möglicherweise einige Anpassungen, da %code% normale 24-Stunden-Tage erwartet.
Ich habe Aufgaben, die in einen Kalender eingefügt werden:
Lass mich nun einen Zusammenhang geben: Jeder Tag dauert hier 7,5 Stunden. Aber ich arbeite mit einer Variablen namens DayHours (die gerade 7,5 ist). (DayHours wird auch in Locked Time verwendet, die unten beschrieben werden).
Das Ziel dieses Kalenders ist es, 7,5 Stunden Arbeitstage für Mitarbeiter zu planen.
Was ich brauche, ist ein Algorithmus, der mir korrekt sagen kann, wie viele Stunden tatsächlich an einem Tag belegt sind.
Das scheint einfach, aber ist eigentlich ziemlich rekursiv.
Zuerst ein paar Notizen. Sie werden bemerken, Case Manager, um 14 Uhr, könnte in 2 Tagen von 7,5 Stunden mit 1 Stunde Rest erledigt werden. Es ist auf 3 Tage gestreckt, weil 1. Zeitplan, ist 5 Stunden lang, und 2. kann nicht gestartet werden, bis die Vorgängeraufgaben des Tages abgeschlossen sind.
Es gibt auch das Konzept der gesperrten Zeit. In lila ist die gesperrte Zeit. Dies ist ein 10-Stunden Block der Sperrzeit. Das heißt, am 12. kann ich nur (7.5 - 7.5) Arbeitsstunden machen, und Montag, nur (7.5 - 2.5) auch.
Ich habe bereits eine Funktion, um die verfügbaren Stunden eines aktuellen Tages zu berechnen, um dies zu berücksichtigen:
%Vor%Es gibt auch das Konzept der Carry-Stunden.
Hier ist ein Beispiel:
Nehmen wir nun Donnerstag den 18. (Der 18. hat 1. Fall):
Um die Anzahl der Stunden zu ermitteln, die dieser Tag für diesen Mitarbeiter hat, müssen wir uns zuerst die Aufgaben ansehen, die an diesem Tag beginnen, enden oder enden.
Ich weiß nicht, wie viele Stunden ich am 18. machen kann, weil die Aufgabe, die an diesem Tag endete, vielleicht Stunden gehabt hat. Also schaue ich den Starttag des Komponententests an. Ich kann das nicht herausfinden, entweder weil NWDM an diesem Tag fertig ist und vielleicht Stunden hat.
Also jetzt gehe ich NWDM bewerten. Ahh, dieser hat an diesem Tag nichts zu Ende, daher weiß ich, dass Schedule 5 / 7,5 Stunden zur Verfügung steht.
Also mache ich weiter und füge jeden Tag 7,5 Stunden hinzu.
Dann komme ich zum letzten Tag von NWDM. Bis dahin habe ich 5 + 7,5 + 7,5 + 7,5 Stunden daran gearbeitet,
Also habe ich 27,5 Stunden eingeplant, also werde ich am 22. Platz (30 - 27,5 = 2,5 Stunden) einlegen, um es zu beenden. So habe ich noch 5 Stunden Zeit, um an Unit Tests zu arbeiten.
Dies bedeutet, dass ich 1.5h brauche, um es zu beenden. Jetzt ist Case 1 Stunde lang.
Wäre Fall 7,5 - 1,5 oder mehr gewesen, sagen wir, dass der Tag voll ist und DayHours zurückkehrt.
Deshalb sind wir fertig. Der Rückgabewert ist 1,5 + 1 = 2,5.
Die Funktion sollte ein bisschen wie diese aussehen:
%Vor%Um die Ereignisse zu erhalten, die an einem bestimmten Tag beginnen, enden oder fallen, verwende ich:
%Vor%Der Zeitplan hat die folgenden relevanten Felder:
%Vor%Der Zeitplan sieht ungefähr so aus:
%Vor%Könnte mir jemand bei der Entwicklung eines Algorithmus helfen, der das kann?
Dies beantwortet nicht die genaue Frage, aber ich würde vorschlagen, Ihre Logik zu vereinfachen, indem Sie Ihre Klassen (Objekte) mit einigen Hilfsmethoden erweitern, z. Methoden / Eigenschaften, die Listen von besetzten Tagen zurückgeben. Wenn Sie nicht auf diese Klassen zugreifen können (d. H. Sie stammen nicht aus Ihrer Codebasis), erstellen Sie neue Klassen und ordnen Sie diesen Klassen zu. Auch - die .NET DateTime-Klasse hat einige sehr nützliche Eigenschaften und Enums wie "DayOfWeek" und "TimeOfDay", die für Sie nützlich sein könnten.
Wie so:
Dies beantwortet nicht die genaue Frage, aber ich würde vorschlagen, Ihre Logik zu vereinfachen, indem Sie Ihre Klassen (Objekte) mit einigen Hilfsmethoden erweitern, z. Methoden / Eigenschaften, die Listen von besetzten Tagen zurückgeben. Wenn Sie nicht auf diese Klassen zugreifen können (d. H. Sie stammen nicht aus Ihrer Codebasis), erstellen Sie neue Klassen und ordnen Sie diesen Klassen zu. Auch - die .NET DateTime-Klasse hat einige sehr nützliche Eigenschaften und Enums wie "DayOfWeek" und "TimeOfDay", die für Sie nützlich sein könnten.