Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Google Chrome Time nach TDateTime (https://www.delphipraxis.net/170400-google-chrome-time-nach-tdatetime.html)

Shark99 15. Sep 2012 11:48

Google Chrome Time nach TDateTime
 
Hallo!

Ich versuche die Datumsstring von Google Chrome nach TDateTime zu wandeln.

Es ist Zeichenketten mit der Länge von 17 Bytes.

Beispiel: 12990353101092500

Nach viel Googeln habe ich festgestellt dass es ein leicht
modifiziertes Windows NT Datumsformat ist. Man muss zu
den 17 Stellen nur eine 0 anhängen damit es 18 werden.

Es handelt sich dann um die Zeit seit dem 1 Januar 1601 in Schritten von
100 Nanosekunden.

Auf der Windows Kommandozeile kann man sich die Zeit aus dem Beispiel (+ eine 0 am Ende)
so anzeigen lassen:

w32tm.exe /ntte 129903531010925000

Ergebnis:

150351 07:25:01.0925000 - 25.08.2012 09:25:01

Ich bitte nun um Hilfe um dieses Datumsformat nach TDateTime
zu konvertieren. Hab es selbst versucht ab es kommt nur
merkwürdiges dabei raus (Jahr 2381 etc).

Phoenix 15. Sep 2012 11:59

AW: Google Chrome Time nach TDateTime
 
Was bitte ist ein Datumsstring von "Google Chrome"? Meinst Du den Wert eines Javascript-Date Objektes? Schliesslich ist Chrome nur ein Webkit-Browser mit der V8 Javascript-Engine.

BUG 15. Sep 2012 12:26

AW: Google Chrome Time nach TDateTime
 
Ich denke diese Funktion ist gut erklärt und kann einfach umgebaut werden.

Mich würde aber auch interessieren, wo solche merkwürdigen Timestamps in Chrome verwendet werden.

Shark99 15. Sep 2012 17:07

AW: Google Chrome Time nach TDateTime
 
Zitat:

Zitat von Phoenix (Beitrag 1182997)
Was bitte ist ein Datumsstring von "Google Chrome"? Meinst Du den Wert eines Javascript-Date Objektes? Schliesslich ist Chrome nur ein Webkit-Browser mit der V8 Javascript-Engine.

Chrome schreibt verschiedene Data Files (Bookmarks, History etc) in JSON format, dort gibt es die Datum Strings eben in diesem Windows NT Zeitformat, aber mit 17 statt 18 stellen.

Zitat:

Zitat von BUG (Beitrag 1183003)
Ich denke diese Funktion ist gut erklärt und kann einfach umgebaut werden..

Das war meine Ausgangsbasis. Habe in einem Thread den Tip bekommen die rechten 6 Stellen abzuschneiden von dem Chrome Zeitstring und dann die Unix Time konvertierung anzuwenden. Leider kam dabei dann das Jahr 23xx raus.

Phoenix 15. Sep 2012 17:34

AW: Google Chrome Time nach TDateTime
 
Wenn es JSON ist, hast Du einfach mal versucht das als einen Javascript-Date-Wert zu verarbeiten?
Der einfachste Check wäre, ein new Date('value') in der Chrome-Javascript Console (Developer tools) zu machen, und dann zu schauen ob da was Sinnvolles bei rauskommt.

Shark99 15. Sep 2012 17:38

AW: Google Chrome Time nach TDateTime
 
Es kommt dann 'Invalid date'

BUG 15. Sep 2012 18:17

AW: Google Chrome Time nach TDateTime
 
Mhm, ich habe es eben auch nicht so hingekriegt :?

Egal, dann eben ohne überlegen:
Code:
const factor = 1.45218472707248E-12;
const StartDate: TDateTime = 22282 {1.1.1961};

function DateTimeToChrome(ConvDate: TDateTime): UInt64 ;
begin
Result := round((ConvDate - StartDate) / factor);
end;

function ChromeToDateTime(ticks: UInt64): TDateTime;
begin
  Result := (ticks * factor) + StartDate;
end;

function calcFactor: double;
begin
  result := (StrToDateTime('25.08.2012 09:25:01') - StartDate)/12990353101092500.0;
end;
Jetzt Daumen drücken und hoffen (=> Testen), dass es wirklich so linear geht :pale:

Shark99 16. Sep 2012 01:27

AW: Google Chrome Time nach TDateTime
 
BUG, danke für den Versuch, aber es klappt noch nicht.

Hab so getestet:

procedure TForm1.Button1Click(Sender: TObject);
begin
Caption := DateTimeToStr(ChromeToDateTime(12990353101092500)) ;
end;

Ergebnis: 00.00.0000 14:40:47

Bummi 16. Sep 2012 07:37

AW: Google Chrome Time nach TDateTime
 
Folgendes bedürfte IMHO noch der Zeitzonen und Sommerzeitbehandlung, ansonsten meine ich passt es
Delphi-Quellcode:
Function MyDateTime(d:Double):TdateTime;
begin
  Result := (d/1000000 + EncodeDate(1601,1,1) * (24*60*60))/(24*60*60) ;
end;

Sir Rufo 16. Sep 2012 07:48

AW: Google Chrome Time nach TDateTime
 
Irgendwie riecht das so, als ob man mit Delphi-Referenz durchsuchenFileDateToDateTime da weiter kommt :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz