Wieder mal rechnen mit der Zeit und mit Zeitspannen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Wieder mal rechnen mit der Zeit und mit Zeitspannen

    Ich habe jetzt viele Stunden in Gooogle und in diversen Foren verbracht, aber ich fine einfach nicht die richtige Lösung.
    Es geht um folgendes:
    Ich möchte für ein Spiel (Lords & Knights) eine Zeitberechnung durchführen.

    Folgende Variablen sollen verwendet werden:

    Die aktuelle Uhrzeit
    Ein Integerwert mit der Anzahl an Feldern z.B. (29)
    Ein Variable die die Zeit enthält die eine Einheit pro Feld braucht z.B. (00:10:50) dies sollten 10 Minuten und 50 Sekunden sein


    Ich möchte nun wissen, um welche Uhrzeit (ggf. mit neuem Tag) die Einheit am Ziel ankommt. Also im Grunde genommen aktuelle Uhrzeit + (29 * 00:10:50)

    Hört sich so einfach an, und ich habe schon viel herumexperimentiert mit Timespam usw., aber eine korrekte Lösung habe ich nicht bekommen. Ich fände es toll, wenn mir jemand helfen könnte das Problem zu lösen. (Bitte keine schaue ins openbook bei gallileo oder schau in den Objektbrowser oder drücke F1, das habe ich schon alles durch.)

    Gruß

    Thomas aus Münster
    int übertrag_minutes = 0;
    int übertrag_hours = 0;
    int timespan_seconds = 0;
    int timespan_minutes = 0;
    int timespan_hours = 0;


    timespan_seconds = Geschwindigkeit.seconds * Anzahl_Felder;
    übertrag_minutes = timespan_seconds / 60;
    timespan_seconds %= 60;
    timespan_minutes = Geschwindigkeit.minutes * Anzahl_Felder + übertrag_minutes;
    übertrag_hours = timespan_minutes / 60;
    timespan_minutes %= 60;
    timespan_hours = Geschwindigkeit.hours * Anzahl_Felder + übertrag_hours;

    Erklärung:
    int = Integer
    % = mod (Rest beim Teilen)

    Sorry dass es C# ist, sollte man aber verstehen

    Die gesuchte Zeitspanne sind dann timespan_seconds /-minutes/-hours

    Edit:
    Es gibt einen Datentyp namens TimeSpan?^^
    Soooo, ich habs nun soweit hin bekommen, freu :)

    Quellcode

    1. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    2. Dim SpeerZeit As TimeSpan = New TimeSpan(0, 0, 11, 42)
    3. Dim Jetzt As Long
    4. Dim ReiseZeit As Double
    5. Dim Ankunftszeit As Date
    6. Dim Felder As Integer = 8
    7. Jetzt = Now.Ticks ' Variable Jetzt wird mit der aktuellen Ticks Anzahl gefüllt
    8. ReiseZeit = (SpeerZeit.Ticks * Felder) ' ReiseZeit = Zeitdauer pro Feld (Timespan)* Anzahl der Felder
    9. Ankunftszeit = New Date(Jetzt + ReiseZeit) ' AnkunftsZeit = aus beiden Tick-Werten das neues Datum bilden
    10. MsgBox(New Date(ReiseZeit))
    11. MsgBox(Ankunftszeit)
    12. End Sub


    Jetzt hätte ich noch eine Frage, die Speerzeit ist wie ich gerade gesehen habe nicht als 00:11:42 angegeben sondern als 11,7. Diese 11,7 würde ich gerne per Textbox eingeben können. Wie bekomme ich aus 11,7
    (0, 0, 11, 42) für den TimeSpan?
    mit Timespan.Parse.

    hat das problem, dass der User richtiges Zeitformat schreiben muß hh:mm:ss.
    11,7 ist kein richtiges Zeitformat. dabei ist nichtmal klar, ob die Nachkomma-Zahl 7 Sekunden darstellt, oder 7/10 Minute (dezimale Zeit-darstellung).

    einfacher zu proggen, und eiglich auch nicht umständlicher zu benutzen wäre, du würdest einfach die Sekunden in die Textbox schreiben lassen, etwa 667(s).

    ErfinderDesRades schrieb:

    einfacher zu proggen, und eiglich auch nicht umständlicher zu benutzen wäre, du würdest einfach die Sekunden in die Textbox schreiben lassen, etwa 667(s).

    Wow, ich habe von dir ja schon zig kommentare gelesen, aber das Du etwas einfacher machen willst, das ist echt was neues (nicht böse gemeint) ;)

    Aber nun zu deiner Idee. Die ist wirklich gut und die werde ich wohl umsetzen. Wie genau die Zeit gemeint ist, muss ich durch versuche herraus bekommen, es gibt aber immer nur eine Nachkommarstelle also sind Sekunden wohl unwahrscheinlich.

    Ich danke Euch alle auf jeden Fall für die Hilfen. Jetzt kann ich richtig durchstarten :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Scalar“ ()

    Scalar schrieb:

    Ich möchte nun wissen, um welche Uhrzeit (ggf. mit neuem Tag) die Einheit am Ziel ankommt. Also im Grunde genommen aktuelle Uhrzeit + (29 * 00:10:50)
    Deklarationen

    VB.NET-Quellcode

    1. Private spielzeit As DateTime
    2. Private zeitverschiebung As TimeSpan
    Wenn das Programm startet, nimmst Du dier aktuelle Zeit mit

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim start = DateTime.Now
    3. 'die aktuelle Spielzeit setzt Du mit
    4. spielzeit = New DateTime(Jahr, Monat, Tag, Stunde, Minute, Sekunde)
    5. 'Aus beiden bildest Du die Differenz:
    6. Dim zeitverschiebung = start - spielzeit
    7. End Sub

    Wann die Einheit am Ziel angekommen ist, errechnest Du so:

    VB.NET-Quellcode

    1. Dim EINHEIT_AM_ZIEL = DateTime.Now - zeitverschiebung
    2. MessageBox.Show(EINHEIT_AM_ZIEL.ToString)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!