Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

JSON Date Parsing

See more JSON Examples

Demonstrates how to parse date/time strings from JSON.

Note: This example uses the DtOf and DateOf methods introduced in Chilkat v9.5.0.73

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.DtObj,
  Chilkat.JsonObject,
  Chilkat.CkDateTime;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  json: TJsonObject;
  dateTime: TCkDateTime;
  dt: TDtObj;
  getAsLocal: Boolean;

begin
  success := False;

  json := TJsonObject.Create;
  json.EmitCompact := False;

  //  First, let's create JSON containing some date/time strings.
  json.UpdateString('test.timestamp','2018-01-30T20:35:00Z');
  json.UpdateString('test.rfc822','Tue, 24 Apr 2018 08:47:03 -0500');
  json.UpdateString('test.dateStrings[0]','2018-01-30T20:35:00Z');
  json.UpdateString('test.dateStrings[1]','Tue, 24 Apr 2018 08:47:03 -0500');
  json.UpdateNumber('test.StartLoggingTime','1446834998.695');
  json.UpdateNumber('test.Expiration','1442877512.0');
  json.UpdateInt('test.StartTime',1518867432);

  WriteLn(json.Emit());

  //  We've built the following JSON:

  //  {
  //    "test": {
  //      "timestamp": "2018-01-30T20:35:00Z",
  //      "rfc822": "Tue, 24 Apr 2018 08:47:03 -0500",
  //      "dateStrings": [
  //        "2018-01-30T20:35:00Z",
  //        "Tue, 24 Apr 2018 08:47:03 -0500"
  //      ],
  //      "StartLoggingTime": 1446834998.695,
  //      "Expiration": 1442877512.0,
  //      "StartTime": 1518867432
  //    }
  //  }

  //  Use the DateOf and DtOf methods to load Chilkat date/time objects with the date/time values.
  //  The CkDateTime object is primarily for loading a date/time from numerous formats, and then getting
  //  the date/time in various formats.  Thus, it's primarly for date/time format conversion.
  //  The DtObj object holds a date/time where the individual components (day, month, year, hour, minutes, etc.) are 
  //  immediately accessible as integers.
  dateTime := TCkDateTime.Create;
  dt := TDtObj.Create;
  getAsLocal := False;

  //  Load the date/time at test.timestamp into the dateTime object.
  success := json.DateOf('test.timestamp',dateTime);
  WriteLn(dateTime.GetAsTimestamp(getAsLocal));
  WriteLn(dateTime.GetAsUnixTime(False));
  WriteLn(dateTime.GetAsRfc822(getAsLocal));

  success := json.DateOf('test.rfc822',dateTime);
  WriteLn(dateTime.GetAsTimestamp(getAsLocal));

  json.I := 0;
  success := json.DateOf('test.dateStrings[i]',dateTime);
  WriteLn(dateTime.GetAsTimestamp(getAsLocal));

  json.I := 1;
  success := json.DateOf('test.dateStrings[i]',dateTime);
  WriteLn(dateTime.GetAsTimestamp(getAsLocal));

  success := json.DateOf('test.StartLoggingTime',dateTime);
  WriteLn(dateTime.GetAsTimestamp(getAsLocal));

  success := json.DateOf('test.Expiration',dateTime);
  WriteLn(dateTime.GetAsTimestamp(getAsLocal));

  success := json.DateOf('test.StartTime',dateTime);
  WriteLn(dateTime.GetAsTimestamp(getAsLocal));

  //  Output so far:

  //  	2018-01-30T20:35:00Z
  //  	1517344500
  //  	Tue, 30 Jan 2018 20:35:00 GMT
  //  	2018-04-24T13:47:03Z
  //  	2018-01-30T20:35:00Z
  //  	2018-04-24T13:47:03Z
  //  	2015-11-07T00:36:38Z
  //  	2015-09-22T04:18:32Z
  //  	2018-02-17T17:37:12Z

  //  Now load the date/time strings into the dt object:
  success := json.DtOf('test.timestamp',getAsLocal,dt);
  WriteLn('month=' + dt.Month + ', day=' + dt.Day + ', year=' + dt.Year + ', hour=' + dt.Hour + ', minute=' + dt.Minute);

  success := json.DtOf('test.rfc822',getAsLocal,dt);
  WriteLn('month=' + dt.Month + ', day=' + dt.Day + ', year=' + dt.Year + ', hour=' + dt.Hour + ', minute=' + dt.Minute);

  json.I := 0;
  success := json.DtOf('test.dateStrings[i]',getAsLocal,dt);
  WriteLn('month=' + dt.Month + ', day=' + dt.Day + ', year=' + dt.Year + ', hour=' + dt.Hour + ', minute=' + dt.Minute);

  json.I := 1;
  success := json.DtOf('test.dateStrings[i]',getAsLocal,dt);
  WriteLn('month=' + dt.Month + ', day=' + dt.Day + ', year=' + dt.Year + ', hour=' + dt.Hour + ', minute=' + dt.Minute);

  success := json.DtOf('test.StartLoggingTime',getAsLocal,dt);
  WriteLn('month=' + dt.Month + ', day=' + dt.Day + ', year=' + dt.Year + ', hour=' + dt.Hour + ', minute=' + dt.Minute);

  success := json.DtOf('test.Expiration',getAsLocal,dt);
  WriteLn('month=' + dt.Month + ', day=' + dt.Day + ', year=' + dt.Year + ', hour=' + dt.Hour + ', minute=' + dt.Minute);

  success := json.DtOf('test.StartTime',getAsLocal,dt);
  WriteLn('month=' + dt.Month + ', day=' + dt.Day + ', year=' + dt.Year + ', hour=' + dt.Hour + ', minute=' + dt.Minute);

  //  Output:

  //  month=1, day=30, year=2018, hour=20, minute=35
  //  month=4, day=24, year=2018, hour=13, minute=47
  //  month=1, day=30, year=2018, hour=20, minute=35
  //  month=4, day=24, year=2018, hour=13, minute=47
  //  month=11, day=6, year=2015, hour=18, minute=36
  //  month=9, day=21, year=2015, hour=23, minute=18
  //  month=2, day=17, year=2018, hour=11, minute=37


  json.Free;
  dateTime.Free;
  dt.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.