【问题标题】:How to read DateTime from JSON with SuperObject?如何使用 SuperObject 从 JSON 中读取 DateTime?
【发布时间】:2013-10-29 16:00:24
【问题描述】:

我正在使用 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 库?

【问题讨论】:

  • 您的 JSON 时间戳似乎以微秒为单位(而不是人们可能期望的以毫秒为单位)。将其读取为 Int64 值,但在将其传递给 JavaTimeToDelphiDateTime 函数之前,将其转换为函数期望的单位 (which is milliseconds ?)。
  • 谢谢。该函数返回 01.02.5042 12:34:21 :d 另外我将 div 值设置为 1000,以毫秒为单位进行转换,结果仍然错误。如果我 div 数据百万,我得到 05.04.1970...
  • 我对您用于转换的函数一无所知(因为它不是 Delphi 的一部分)。我刚刚尝试使用this website 转换您的时间戳,上面写着“假设此时间戳以微秒为单位(1/1,000,000 秒):Thu, 24 Mar 2011 11:33:14 GMT",看起来很合理。请包括您用于转换为问题的代码。除此之外,还要详细说明“不起作用” 的含义——你得到了什么结果以及你期望得到什么。
  • 好吧,看来你不想更新你的问题......没关系。通过使用 this function 将您的值除以 10,000,您将得到 24.3.2011 12:33:14。很难说这是否是你想要得到的,也很难说为什么。这就是你的问题应该是什么。与此同时,我已经投票结束这个问题......
  • 我现在更新了我的帖子。谢谢你的帮助!你能回答一下这个问题吗?

标签: json delphi delphi-xe superobject


【解决方案1】:

解决办法:

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;

【讨论】:

    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多