German Rechnen mit Ticks, bin ratlos

Joe73

Active 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
 

DonManfred

Expert
Licensed User
Longtime User
Bitte benutze [CODE]code here...[/CODE] tags

Probiers mal mit

B4X:
    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

Active Member
Licensed User
Bitte benutze [CODE]code here...[/CODE] tags

Probiers mal mit

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

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

Aber warum wird nun eigentlich
B4X:
xx2 = 86400000 * 365 * 2

nicht korrekt berechnet?

mfg Jürgen
 

JanPRO

Well-Known Member
Licensed User
Longtime 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:

B4X:
    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

Active Member
Licensed User
Hallo,

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

mfg Jürgen
 
Top