Hallo zusammen,
leider bin ich bei der Suche nicht fündig geworden und bevor ich das Rad neu erfinde, dachte ich frage mal kurz nach.
Hat jemand schon mal einen DatumZeit (hier nur die Zeit) in einen TimeSlot(Int) konvertiert?
Also man sagt
GetTimeSlot(DateTime time, Int32 slotMinutes)
{
// time = Datum und/oder Zeit für die Berechnung
// slotMinutes = Minuten die ein Slot groß ist.
}
Das man wenn man die Aktuelle Uhrzeit übergibt dann eine Zahl bekommt welcher Slot das vom Start des Datum ist.
Im Grunde
GetTimeSlot(DateTime.Now, 10) // hier mal 9:36:00 und 10 Minuten Slots
Das würde mir dann 58 zurückgeben
Vielen Dank falls mir jemand helfen kann.
Gruß Simon
Das wirst du doch selber hinbekommen, aus den Stunden und Minuten den Wert zu ermitteln...
Hi,
ich habe es nun so selber gelöst:
public Int32 GetTimeSlot(DateTime time, Int32 slotMinutes)
{
DateTime time2 = DateTime.Today;
for (int i = 0; i < (1440 / slotMinutes); i++)
{
//System.Console.WriteLine("Timeslot (" + time2 + " -> " +time2.AddMinutes(slotMinutes) + ")");
if ((time.Ticks >= time2.Ticks) && (time.Ticks < time2.AddMinutes(slotMinutes).Ticks))
{
//System.Console.WriteLine("TIMESLOT " + i + " -> " + time);
return i;
}
time2 = time2.AddMinutes(slotMinutes);
}
return -1;
}
Mal schauen was ihr dazu sagt?
Logik kannst ja selbst prüfen 🙂
Zeiten generell: [FAQ] DateTime vs. DateTimeOffset und der Umgang mit Zeiten in .NET
Methode würde ich mit Try-Pattern lösen, also
bool TryGetTimeSlot(DateTimeOffset reference, TimeSpan duration, out TimeSpan slot)
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Ich meinte eigentlich nur
return (60 * time.Hour + time.Minute) / slotMinutes; // evtl. noch aufrunden
Hallo,
// evtl. noch aufrunden
Dazu gibt es bei der Ganzzahldivision einen netten Trick:
return (60 * time.Hour + time.Minute + (slotMinutes - 1)) / slotMinutes;
Spart die Konvertierung zu double und zurück, die bei Math.Round
nötig wäre.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Hallo gfoidl,
mir ist das klar, aber ich weiß nicht, ob das überhaupt die gewünschte Berechnung ist (evtl. auch einfach +1
, falls 0:00h schon als 1. Slot zählt).
Hallo Th69,
mir ist / war ziemlich klar dass du diesen "Trick" kennst, daher hab ich auch nicht dich angesprochen, sondern alle anderen die das nicht kannten.
Das erspart nämlich das Runden via Um- und Zurückwandeln zu double
od. einen if
-Block. Der Trick ist eher als ganz allgemeiner Tipp gemeint.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Ah, OK. 👍