Browse Source

* Add possibility to specify UTC or not

Michaël Van Canneyt 6 months ago
parent
commit
9b2b1c12ff
1 changed files with 8 additions and 4 deletions
  1. 8 4
      packages/fcl-jsonschema/src/fpjson.schema.codegen.pp

+ 8 - 4
packages/fcl-jsonschema/src/fpjson.schema.codegen.pp

@@ -73,7 +73,10 @@ Type
   { TSerializerCodeGenerator }
   { TSerializerCodeGenerator }
 
 
   TSerializerCodeGenerator = class(TJSONSchemaCodeGenerator)
   TSerializerCodeGenerator = class(TJSONSchemaCodeGenerator)
+  const
+    Bools : Array[Boolean] of String = ('False','True');
   private
   private
+    FConvertUTC: Boolean;
     FDataUnitName: string;
     FDataUnitName: string;
     function FieldToJSON(aProperty: TPascalPropertyData) : string;
     function FieldToJSON(aProperty: TPascalPropertyData) : string;
     function ArrayMemberToField(aType: TPropertyType; const aPropertyTypeName: String; const aFieldName: string): string;
     function ArrayMemberToField(aType: TPropertyType; const aPropertyTypeName: String; const aFieldName: string): string;
@@ -91,6 +94,7 @@ Type
   public
   public
     procedure Execute(aData: TSchemaData);
     procedure Execute(aData: TSchemaData);
     property DataUnitName: string read FDataUnitName write FDataUnitName;
     property DataUnitName: string read FDataUnitName write FDataUnitName;
+    property ConvertUTC : Boolean Read FConvertUTC Write FConvertUTC;
   end;
   end;
 
 
 implementation
 implementation
@@ -377,7 +381,7 @@ begin
         else
         else
           Result := Format('GetJSON(%s)', [aFieldName]);
           Result := Format('GetJSON(%s)', [aFieldName]);
       ptDateTime :
       ptDateTime :
-        Result := Format('DateToISO8601(%s)', [aFieldName]);
+        Result := Format('DateToISO8601(%s,%s)', [aFieldName,Bools[Not ConvertUTC]]);
       ptEnum :
       ptEnum :
         Result := Format('%s.AsString', [aFieldName]);
         Result := Format('%s.AsString', [aFieldName]);
     else
     else
@@ -584,7 +588,7 @@ begin
       Addln('Result.%s.AsString:=%s;', [lFieldName, lValue]);
       Addln('Result.%s.AsString:=%s;', [lFieldName, lValue]);
     ptDateTime:
     ptDateTime:
       begin
       begin
-      Addln('Result.%s:=ISO8601ToDateDef(%s,0);', [lFieldName, lValue]);
+      Addln('Result.%s:=ISO8601ToDateDef(%s,0,%s);', [lFieldName, lValue, Bools[Not ConvertUTC]]);
       end;
       end;
     ptInteger,
     ptInteger,
     ptInt64,
     ptInt64,
@@ -800,7 +804,7 @@ end;
 procedure TSerializerCodeGenerator.GenerateConverters;
 procedure TSerializerCodeGenerator.GenerateConverters;
 
 
 begin
 begin
-  Addln('function ISO8601ToDateDef(S: String; aDefault : TDateTime) : TDateTime;');
+  Addln('function ISO8601ToDateDef(S: String; aDefault : TDateTime; aConvertUTC: Boolean = True) : TDateTime;');
   Addln('');
   Addln('');
   Addln('begin');
   Addln('begin');
   indent;
   indent;
@@ -810,7 +814,7 @@ begin
   undent;
   undent;
   Addln('try');
   Addln('try');
   indent;
   indent;
-  AddLn('Result:=ISO8601ToDate(S);');
+  AddLn('Result:=ISO8601ToDate(S,aConvertUTC);');
   undent;
   undent;
   Addln('except');
   Addln('except');
   indent;
   indent;