locked
Unix-Time als int64 im Fux? RRS feed

  • Frage

  • hi Füxe;

    kleines Problem, aber für die Gurus sicherlich keines.

    Ich muss einer DLL die Unix-Zeit übergeben. Aber die will einen 64Bit-wert haben. Wie kann ich der mit sowas füttern?

    WITH This
     DECLARE INTEGER se_updateTime IN (.TSE_DllFile) INTEGER Ln_NewTime
       Lo_Ckat = CreateObject('Chilkat_9_5_0.CkDateTime')
       Lo_Ckat.SetFromCurrentSystemTime()
       Ln_NewTime = Lo_Ckat.GetAsUnixTime(1)
       .TSE_ErrNumm = se_updateTime(Ln_NewTime)
       RELEASE Lo_Ckat
    ENDWITH
    
    auch das direkte einfügen geht nicht
    se_updateTime(Lo_Ckat.GetAsUnixTime(1))

    wie muss ich das in der DECLARE-Zeile definieren?

    lg mike

    Sonntag, 14. Februar 2021 04:34

Alle Antworten

  • Hallo mike,

    Es scheint, dass Du eine Klasse aus einer Bibliothek eines Drittanbieters verwendest. Kannst Du die GetAsUnixTime64-Methode nutzen? Sie ist dasselbe wie die GetUnixTime-Methode, gibt jedoch Datum und Uhrzeit als 64-Bit-Ganzzahl zurück.

    Gruß,

    Ivan Dragov

    Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.

    Montag, 15. Februar 2021 09:26
    Administrator
  • ...Kannst Du die GetAsUnixTime64-Methode nutzen?...

    leider nein. bzw. ich hab diesbezüglich noch nichts gefunden. ChilKat, zumindestens die aktuelle Version davon, hat nur die o.A. funktion ohne dem Zusatz 64.

    Um genau zu sein, würde man ja diese ChilKat gar nicht benötigen, da ja die Berechnung des Unix-Datums ja mit bordeigenen Mitteln gelöst werden kann.
        MyVar = DATETIME() - DATETIME(1970,1,1)
    Das ergibt ja genau selbiges Ergebnis. aber ich habe nur ein Int32.

    Frage: wenn ich einen String wie folgt belege

    Lc_Int64 = ""
    Lc_NewDt = SUBSTR(TRANSFORM(DATETIME()-DATETIME(1970,1,1), "@0"),3)
    ** ist z.Bsp. "602AFFD9" (entspricht 15.02.2021 23:12:25)
    ?Lc_NewDt," -> "
    FOR Lc_I = 1 TO 8 STEP 2
        Lc_Int64 = CHR(VAL("0x"+SUBSTR(Lc_NewDt, Lc_I, 2))) + Lc_Int64
    ENDFOR
    Lc_Int64 = Lc_Int64 + REPLICATE(CHR(0), 4)
    
    ** Testausgabe
    FOR Lc_I = 1 TO LEN(Lc_Int64)
    	??RIGHT(TRANSFORM(ASC(SUBSTR(Lc_Int64,Lc_I,1)),"@0"),2)
    	IF Lc_I < LEN(Lc_Int64)
    		??"-"
    	ENDIF
    ENDFOR
    habe ich doch einen 64-Bit-Wert hinterlegt? (Ich hoffe, die Reihenfolge von LSByte und MSByte stimmt)



    Montag, 15. Februar 2021 22:37
  • GELÖST....

    In der Dokumentation der DLL war nur EIN parameter in der Declare-Anweisung dargestellt. Tatsächlich muss die aber so aussehen.

    DECLARE INTEGER se_updateTime IN (.TSE_DllFile) INTEGER Ln_TimeLo, INTEGER Ln_TimeHi
    .TSE_ErrNumm = se_updateTime(DATETIME()-DATETIME(1970,1,1), 0)
    
    DAS konnte ich natürlich vorher nicht wissen

    Donnerstag, 18. Februar 2021 22:36