Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Datumsunterschied zwischen Delphi und javascript (https://www.delphipraxis.net/185827-datumsunterschied-zwischen-delphi-und-javascript.html)

v2afrank 9. Jul 2015 12:52

Datumsunterschied zwischen Delphi und javascript
 
Hallo,
ich muss hier eine Zeit in Milisekunden seit 1.1.1970 in ein lesbares Format umwandelen.
Unter javascript benutze ich hier im Prinzip folgendes Codefragment
d = new Date(1415515893786);
console.log(d.toLocaleString());

Ich erhalte als Ergebnis 9.11.2014, 07:51:33

Unter Delphi habe ich dieses Konstrukt
Delphi-Quellcode:
function SecondSince2Datetime(seconds:Int64):TDatetime;
  var
  refdatum:TDateTime;
  const
    Refmonat=1;
    RefTag=1;
    Refjahr=1970;

    MinutesPerDay    = 60 * 24;
    SecondsPerMinute = 60;
    SecondsPerHour   = 3600;
    SecondsPerDay    = MinutesPerDay * 60;
    Milisecondsperday = SecondsPerDay*1000;
  begin
    refdatum:=encodedate(Refjahr,Refmonat,RefTag);
    result:= refdatum + (seconds / Milisecondsperday);
  end;
  procedure TTest.Button5Click(Sender: TObject);
   begin
    caption :=DateTimeToStr(S2econdSinceDatetime(1415515893786 ));
   end;
Hier erhalte ich als Ergebnis 9.11.2014, 06:51:33
Ich denke es hat was mit Sommer / Winterzeit zu tun. Was ist denn das richtige Ergebnis ? Was muss ich machen damit der Browser und das Delphiprogramm beide die gleiche Uhrzeit anzeigen. Das Delphiprogramm habe mit Delphi 6 gemacht wenn es von Interesse ist.
Edit: Ich habe gerade mal ein C# Programm gemacht, das zeigt auch 06:51:33 an

Olli73 9. Jul 2015 14:48

AW: Datumsunterschied zwischen Delphi und javascript
 
Zitat:

Zitat von v2afrank (Beitrag 1308206)
Ich denke es hat was mit Sommer / Winterzeit zu tun.

Nein, denn an diesem Tag galt keine Sommerzeit, kann also bei diesem Beispiel nicht das Problem sein.

Vielmehr ist es wohl die Zeitzone -> mit folgendem Befehl erhältst du auch in JS 06:51

Code:
d.toLocaleString('de-DE', {timeZone: 'UTC'})

Union 9. Jul 2015 15:08

AW: Datumsunterschied zwischen Delphi und javascript
 
Schau Dir mal Soap.XSBuiltIns an, dort gibt es bereits Klassen und Wrapperfunktionen dafür.

Der schöne Günther 9. Jul 2015 16:16

AW: Datumsunterschied zwischen Delphi und javascript
 
Delphi-Quellcode:
procedure justTimeStampThings();
const
   ms: Int64 = 1415515893786;
var
   timeStamp:   TTimeStamp;
   dateTime:   TDateTime;
begin
   timeStamp := MSecsToTimeStamp(ms);
   dateTime := TimeStampToDateTime(timeStamp);
   WriteLn( DateTimeToStr(dateTime) );
end;
ergibt bei mir
Code:
08.11.0045 06:51:33
Immerhin stimmt die Uhrzeit :thumb:

v2afrank 10. Jul 2015 05:48

AW: Datumsunterschied zwischen Delphi und javascript
 
Ich hatte noch weiter nachgeforscht.
Anscheinend interpretiert Delphi in dieser Form die ms als UTC. Javascript beachtet noch die lokale Zeit die auf dem jeweiligen Rechner eingestellt ist. Also in De UTC+1

Zoot 10. Jul 2015 06:54

AW: Datumsunterschied zwischen Delphi und javascript
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1308244)
Code:
08.11.0045 06:51:33
Immerhin stimmt die Uhrzeit :thumb:

45 Jahre seit 1970 ist ja auch nicht so verkehrt.

Der schöne Günther 10. Jul 2015 08:55

AW: Datumsunterschied zwischen Delphi und javascript
 
Moment mal, warum sagen wir nicht einfach
Delphi-Quellcode:
UnixToDateTime(Round(1415515893786 / 1000))
?

Sir Rufo 10. Jul 2015 09:15

AW: Datumsunterschied zwischen Delphi und javascript
 
Zitat:

Zitat von v2afrank (Beitrag 1308280)
Ich hatte noch weiter nachgeforscht.
Anscheinend interpretiert Delphi in dieser Form die ms als UTC. Javascript beachtet noch die lokale Zeit die auf dem jeweiligen Rechner eingestellt ist. Also in De UTC+1

Beide Systeme interpretieren den Wert richtig, allerdings auf Java-Seite machst du noch etwas, was du auf der Delphi-Seite nicht machst.

Javas
Delphi-Quellcode:
Date.ToLocaleString
gibt den Wert passend zur System-Zeitzone aus (dort erfolgt also nochmal eine Umrechnung).

Bei einer Uhrzeit Angabe ist es eben wichtig den Kontext (Zeitzone) zu kennen, sonst habe ich einfach nur einen Wert.

Was ist 5kg - 3kg?
2
2 was? Hasenköttel, Eier?
2kg
;)

Die Doku sagt das im Übrigen auch:
http://docs.oracle.com/javase/7/docs...util/Date.html

gammatester 10. Jul 2015 09:16

AW: Datumsunterschied zwischen Delphi und javascript
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1308289)
Moment mal, warum sagen wir nicht einfach
Delphi-Quellcode:
UnixToDateTime(Round(1415515893786 / 1000))
?

Wenn schon dann
Delphi-Quellcode:
trunc(1415515893786 / 1000)
, sonst ergibt sich 6:51:34

vagtler 10. Jul 2015 20:27

AW: Datumsunterschied zwischen Delphi und javascript
 
Zitat:

Zitat von Sir Rufo (Beitrag 1308291)
[...] auf Java-Seite [...]

Hä? Wo ist denn hier die Rede von Java? :wiejetzt:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:27 Uhr.

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