German Rechnen mit Ticks, bin ratlos

Discussion in 'German Forum' started by Joe73, Jul 8, 2018.

  1. Joe73

    Joe73 Member Licensed User

    Hallo,
    Ich möchte folgendes machen,
    Das momentane Datum in Ticks umwandeln und davon 2 Jahre abziehen.

    Ich versuche es wie folgt:

    Sub FillRnd (n As Int)
    Dim longTi As Long
    Dim xx2 As Long

    xx2 = 86400000 * 365
    Log ("xx2 = " & xx2)
    longTi = DateTime.Now
    Log ("longtime : " & longTi)
    Log ("Datelong : " & DateTime.Date(longTi))
    Log ("Timelong : " & DateTime.Time(longTi))
    longTi = longTi - xx2
    Log ("longtime ---- : " & longTi)
    Log ("Datelong - 2 : " & DateTime.Date(longTi))
    Log ("Timelong - 2 : " & DateTime.Time(longTi))

    ......

    Und nun wird mir folgendes angezeigt:

    xx2 = 1471228928

    das ist für ein Jahr und wenn ich noch alles mal 2 nehme, also

    xx2 = 86400000 * 365 * 2

    dann wird xx2 negativ!!

    Die Ausgabe für:

    Log ("Datelong : " & DateTime.Date(longTi))
    Log ("Timelong : " & DateTime.Time(longTi))

    stimmt, da wird alles richtig angezeigt

    vielleicht hat hier jemand einen Tip...?

    mfg Jürgen
     
  2. DonManfred

    DonManfred Expert Licensed User

    Bitte benutze [CODE]code here...[/CODE] tags

    Probiers mal mit

    Code:
    Dim orgdate As Long = DateTime.Now
        
    Dim p As Period
        p.Years = -
    2
     
        
    Dim newdate  As Long = DateUtils.AddPeriod(orgdate, p)
        
    Log($"$Date{newdate}"$)
     
    Joe73 likes this.
  3. Joe73

    Joe73 Member Licensed User

    Hallo,
    Danke für den Tipp...
    Das mit dem /CODE... usw. hatte ich gesucht, aber nicht gleich gefunden... sorry..

    Aber warum wird nun eigentlich
    Code:
    xx2 = 86400000 * 365 * 2
    nicht korrekt berechnet?

    mfg Jürgen
     
  4. JanPRO

    JanPRO Well-Known Member Licensed User

    Hi,
    ich schätze das Produkt bzw. die einzelnen Faktoren werden als Integer behandelt, sodass die größt mögliche Zahl 2147483647 ist und damit nicht mehr das erwartete Ergebnis deckt. Für eine korrekte Berechnung musst du jeden Faktor explizit als Long deklarieren:

    Code:
    Log(86400000 * 365'= 1471228928 FALSCH
        
        
    Dim L3 As Long = 86400000 * 365
        
    Log(L3) '= 1471228928 FALSCH
        
        
    Dim L As Long = 86400000
        
    Dim L2 As Long = 365
        
    Log (L*L2) '= 31536000000 RICHTIG
    Schönen Abend noch

    Jan
     
    Joe73 likes this.
  5. Joe73

    Joe73 Member Licensed User

    Hallo,

    Danke für die Erklärung.
    Das hätte ich so nicht gedacht.

    mfg Jürgen
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice