1

我使用 SuperObject 库来处理 JSON。

我有这个 JSON(Mozilla FireFox 的一部分,Chrome 书签文件):

   "roots": {
      "bookmark_bar": {
         "children": [ {
            "date_added": "13009663942000000",
            "id": "11",
            "meta_info": "{\"sync\":{\"transaction_version\":\"3\"}}",
            "name": "\u041D\u0430\u0447\u0430\u043B\u044C\u043D\u0430\u044F \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430",
            "type": "url",
            "url": "http://www.mozilla.com/ru/firefox/central/"
         }, {

我尝试使用函数 JavaTimeToDelphiDateTime 将数据作为整数,但它不起作用。

我需要将“date_added”字段读取为 TDateTime。如何做到这一点,使用 SuperObject 库?

4

1 回答 1

3

解决方案:

function JavaTimeToDateTime(javatime:Int64):TDateTime;
// java time -> Win32 file time -> UTC time
// adjust to active time zone -> TDateTime
var
  UTCTime, LocalTime: TSystemTime;
begin
  FileTimeToSystemTime(TFileTime(Int64(javatime + 11644473600000) * 10000), UTCTime);
  SystemTimeToTzSpecificLocalTime(nil, UTCTime, LocalTime);
  Result := SystemTimeToDateTime(LocalTime);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  //13009663942000000 is the value, read from "date_added" field as Int64.
  ShowMessage(DateTimeToStr(JavaTimeToDateTime((13009663942000000 div 10000))));
end;
于 2013-10-21T15:01:57.540 回答