【问题标题】:How do I parse JSON dates with ActionScript?如何使用 ActionScript 解析 JSON 日期?
【发布时间】:2011-05-11 19:00:02
【问题描述】:

我有 JSON 格式的日期,这些日期是使用 JSON.NET 库从 ASP.NET 页面生成的。这些日期如下所示:

"LastModifiedDate": "\/Date(1301412877000-0400)\/"

如何使用 Flex 3 Professional 中的 ActionScript 解析这些?我想以本机数据格式保存它。

注意:我在这里没有问的是如何使用 as3corelib 解析 JSON 提要。我使用该库对 JSON 进行了反序列化,但日期未解码。这就是为什么我需要知道如何解码这种日期格式。

【问题讨论】:

    标签: asp.net apache-flex json actionscript


    【解决方案1】:

    您需要使用as3corelib 的 JSON 实现将您的字符串解码为对象。

    【讨论】:

    • 那行不通。我应该说我使用 as3corelib 来获取 JSON。 JSON 已正确绑定到我的网格,但日期未正确解码。我
    • 那是因为你使用的日期不规范。 as3corelib 解码w3c DTF format (ISO 8601)。如果您希望字符串正常工作或更改服务器对该日期格式的实现,您需要自己将字符串解码为日期。
    • 不符合JSON specs。你最好只发送一个数字,因为你已经知道这是一个日期,所以使用new Date(timestamp) 的时间戳进行转换客户端。
    • 好的,我也找到了james.newtonking.com/archive/2009/02/20/…。看起来 ASP.NET 开发人员必须更新使用的转换器。
    【解决方案2】:
        /**
         * Converts 'Unix tick' format JSON Date to AS3 Date instances.
         * Example json input: "{\"BarDate\":\"\/Date(1334672700000)\/\" }"
         * Example json input: "{\"BarDate\":\"\/Date(1334672700000+0000)\/\" }"
         *
         * @param json date from JSON 
         * @return Date if conversion possible and worked else null. 
         */
        public static function parseJSONUnixTickDateToDate(json:String):Date
        {
            var date:Date = null;
            if (json)
            {
                json = json.substring(json.indexOf("(") + 1, json.indexOf(")"));
                var arr:Array = json.split("+");
                date = new Date(Number(arr[0]));
            }
            return date;
        }
    

    【讨论】:

      【解决方案3】:

      在 ASP 中我使用这个函数来获取 Json 日期

       public static double JsonTime(DateTime dt)
          {//Convert datetime to a Json Datetime
              DateTime d1 = new DateTime(1970, 1, 1);
              DateTime d2 = dt.ToUniversalTime();
              TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);
              return Math.Round( ts.TotalMilliseconds,0);
          } 
      

      然后在 JavaScript 中我使用:

      if (data.indexOf("\/Date(")==7)
             return  new Date(+data.replace(/\D/g, ''));
      

      如果有帮助,可以转换回日期

      单引号和双引号也很有趣,但对于我来说,我找不到在 Net Framework 3 上使用 Json 字符串在服务器端工作的解码器!

      如果你在代码中使用 String ="\u0027" 那么字符串已经被转换,最后我写了一个函数来使用循环来完成这项工作。

      string Padding = "000";
                      for (int f = 1; f <= 256; f++)
                      {
                          string Hex = "\\u" + Padding.Substring(0, 4 - f.ToString().Length) + f;
                          string Dec = "&#" + Int32.Parse(f.ToString(), NumberStyles.HexNumber) + ";";
                          HTML = HTML.Replace(Hex, Dec);
                      }
                      HTML = System.Web.HttpUtility.HtmlDecode(HTML);
      

      我知道不好,但如果你有更好的答案,请告诉我!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-26
        • 2010-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多