![]() |
AW: proprietäres Datumsformat in DB-Tabelle analysieren
Zitat:
BLOBs kennt doch kein Schwein. Viele kennen eben nur Integer, String und Float. :zwinker: |
AW: proprietäres Datumsformat in DB-Tabelle analysieren
Zitat:
Delphi-Quellcode:
Eine simple Umwandlung (ohne Fehlerkontrolle) könnte in einem aktuellen Delphi etwa so aussehen:
TTimeStamp = record
Time: Integer; { Number of milliseconds since midnight } Date: Integer; { One plus number of days since 1/1/0001 } end;
Delphi-Quellcode:
var
arr: TArray<string>; timeStamp: TTimeStamp; dateTime: TDateTime; S: string; begin S := '000B3DC6h0147DE2Ch'; arr := S.Split(['h']); timeStamp.Date := Integer.Parse('$' + arr[0]); timeStamp.Time := Integer.Parse('$' + arr[1]); dateTime := TimeStampToDateTime(timeStamp); end; |
AW: proprietäres Datumsformat in DB-Tabelle analysieren
Da lob ich mir doch einen einfachen Int64 (BigInt) und gut.:dancer:
|
AW: proprietäres Datumsformat in DB-Tabelle analysieren
Zitat:
Sherlock |
AW: proprietäres Datumsformat in DB-Tabelle analysieren
Jetzt wo du es sagst, mal schnell nachgesehn, ob meine beschriebene Berechnung stimmt.
Delphi-Quellcode:
Aua, wozu muß das unbedingt in Assembler sein (XE),
function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;
asm {$IFDEF ALIGN_STACK} SUB ESP, 4 {$ENDIF ALIGN_STACK} PUSH EBX {$IFDEF PIC} PUSH EAX CALL GetGOT MOV EBX,EAX POP EAX {$ELSE !PIC} XOR EBX,EBX {$ENDIF !PIC} PUSH EAX CALL ValidateTimeStamp POP EAX MOV ECX,[EAX].TTimeStamp.Time MOV EAX,[EAX].TTimeStamp.Date SUB EAX,DateDelta IMUL [EBX].IMSecsPerDay OR EDX,EDX JNS @@1 SUB EAX,ECX SBB EDX,0 JMP @@2 @@1: ADD EAX,ECX ADC EDX,0 @@2: PUSH EDX PUSH EAX FILD QWORD PTR [ESP] FDIV [EBX].FMSecsPerDay ADD ESP,8 POP EBX {$IFDEF ALIGN_STACK} ADD ESP, 4 {$ENDIF ALIGN_STACK} end; wenn auch sowas reicht?
Delphi-Quellcode:
Integer.Parse: StrToInt in alten Delphis.
function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;
begin ValidateTimeStamp(TimeStamp); Result := TimeStamp.Time / MSecsPerDay + TimeStamp.Data - DateDelta; end; // Mein Vorschlag sagte zwar // Result := TimeStamp.Data - DateDelta + TimeStamp.Time / MSecsPerDay; // aber ohne Zwischenvariable für die Division isses bestimmt besser. |
AW: proprietäres Datumsformat in DB-Tabelle analysieren
Zitat:
Und wer ein Datum bzw. eine Zeitangabe vor dem BigBang braucht hat imho einen klitzekleinen Denkfehler (aber wirklich nur ein kleiner :) ) |
AW: proprietäres Datumsformat in DB-Tabelle analysieren
Zitat:
![]() ![]() |
AW: proprietäres Datumsformat in DB-Tabelle analysieren
Man sich viele Theorien vor dem BigBang überlegen,
nur praktisch ist das Alles ausserhalb der realen Physik. Womöglich gibt es davor gar keine "Zeit" oder etwas Anderes analoges, was wir niemals sehen werden. Also ich stimme auch eher dafür das t0 erstmal so definiert bleibt wie es war :stupid: |
AW: proprietäres Datumsformat in DB-Tabelle analysieren
Zitat:
|
AW: proprietäres Datumsformat in DB-Tabelle analysieren
Zitat:
Ein Zahlentyp zur Datumsspeicherung zu verwenden wäre auch bei der Herleitung aus
Delphi-Quellcode:
nicht ganz an den Haaren herbeigezogen.
TMyDate = record Date, Time: Integer; end;
:wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz