AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein proprietäres Datumsformat in DB-Tabelle analysieren
Thema durchsuchen
Ansicht
Themen-Optionen

proprietäres Datumsformat in DB-Tabelle analysieren

Ein Thema von Sharky · begonnen am 16. Jan 2018 · letzter Beitrag vom 17. Jan 2018
 
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#7

AW: proprietäres Datumsformat in DB-Tabelle analysieren

  Alt 16. Jan 2018, 14:25
Zitat:
Tja, vermutlich obfuscation oder "historisch gewachsen" aus einer Entwicklung nach Kundenwunsch.
Ich vermute billiger: es ist einfach nur der Datumstyp (Record) nach binär umgewandelt.
TMyDate = record Date, Time: Integer; end;


Jupp, im Prinzip gibt es ja mehrere Möglichkeiten, die es hätten sein können.

* es ist ein Record, also die Stunden, Minuten, Sekunden, Tage, Monat und Jahr liegen in eigenen Bytes/Words.
** das könnte auch mathematisch gelöst sein, also z.B. jeweils mit 100 Multipiziert und aneinander gehängt (beim Byte-Record quasi mit 256 multipliziert)
* es sind zwei Integer (2x 4 Byte)
* es ist ein 64 Bit Integer
* es ist was gemischtes ala z.B. ein 5 Byte und ein 3 Byte Wert

Record und die 2-Byte sind am wahrscheinlichsten, was auch deine Beobachtung mit dem gleichen Datumsanteil bestätigten.
Also erstmal die Teile nach Dezimal umwandeln die größe des Wertes mit bekannten Datumsformaten vergleichen. siehe die Ausführung von Sherlock.

Beim Datumsteil kann man da auch einfach erstmal die Datumsanteile der Größe nach zusammenrechnen, bis man etwa auf den Zielwert kommt.
Ohne Millsekunden ist es ims 1000-fache (3 Dezimalstellen) zu groß und für Nanosekunden fehlt noch bissl was.
Aber die 1000 entsprechen zufällig den Millisekunden.


Falls man die Möglichkeit hat, kann man im Programm sich auch noch ein paar Vergleichswerte mit Tagesanfang 00:00:00, Halbtags 12:00:00 und Halbzeit 12:30:30,
sowie Jahresanfang 01.01.2000, ein Vergleichstag 02.01.2000 und ein Vergleichsjahr 01.01.2010 erstellen.
Die Differenzwerte besagen dann für Wert 1 = 1 pro Tag und bei Wert zwei 1000 pro Sekunde. (bei deinem Zielformat)

Oder in der Datenbank einfach mal eine 0 (00000000h00000000h) einstellen schauen was das Programm anzeigt, bzw. auch für 00000000h0147DE2Ch und 000B3DC6h00000000h.
Bei Letzterem siehst dann, ob die beiden Werte wirklich nur für Datum und Uhrzeit stehen oder ob es sich überlappt.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Jan 2018 um 14:35 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:03 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-2025 by Thomas Breitkreuz