如何使用ActionScript解析JSON日期?

时间:2011-05-11 19:00:02

标签: asp.net flex json actionscript

我在JSON中有使用JSON.NET库从ASP.NET页面生成的日期。这些日期如下:

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

如何使用Flex 3 Professional中的ActionScript解析这些问题?我希望以原生数据格式提供此功能。

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

在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);

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

答案 2 :(得分:1)

    /**
     * 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;
    }