Registriert seit: 6. Mär 2013
6.176 Beiträge
Delphi 10 Seattle Enterprise
|
AW: TJSONMarshal / TJSONUnMarshal böse Falle
2. Okt 2017, 10:36
Ich verstehe das Problem noch nicht. Ein TDateTime ist lokale Zeit, nicht UTC. Von TObject nach JSON nehmen wir kein UTC an, von Json nach TObject schon. Ich denke, das ist doch so richtig, oder?
Delphi-Quellcode:
program UTCMarshalTest;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
System.DateUtils,
System.Types,
System.Json,
REST.JsonReflect,
Unit1 in ' Unit1.pas';
procedure p();
var
marshal: TJsonMarshal;
unmarshal: TJSONUnMarshal;
myObject: TMyObject;
timestamp: TDateTime;
myObject2: TMyObject;
begin
marshal := nil; unmarshal := nil;
myObject := nil; myObject2 := nil;
try
marshal := TJSONMarshal.Create();
unmarshal := TJSONUnMarshal.Create();
myObject := TMyObject.Create();
timestamp := EncodeDateTime(2017, 10, 02, 10, 28, 44, 123);
myObject.FTimeStamp := timestamp;
myObject2 := unmarshal.CreateObject(
TMyObject,
marshal.Marshal(myObject) as TJsonObject
) as TMyObject;
Assert(
CompareDateTime(myObject.FTimeStamp, myObject2.FTimeStamp)
=
System.Types.EqualsValue
);
finally
marshal.Free(); unmarshal.Free();
myObject.Free(); myObject2.Free();
end;
end;
begin
try
p();
except
on E: Exception do
Writeln(E.ClassName, ' : ', E. Message);
end;
WriteLn(sLineBreak, ' end.');
ReadLn;
end.
Geändert von Der schöne Günther ( 2. Okt 2017 um 10:39 Uhr)
|
|
Zitat
|