代码之家  ›  专栏  ›  技术社区  ›  Daniel A. White

JSON`date(…)`到`java.Util.date`使用`org.JSON`

  •  11
  • Daniel A. White  · 技术社区  · 16 年前

    我正在学习Java并编写一个android应用程序,它使用服务器传递的JSON对象。

    除了日期以外,我都能用。

    'SomeKey':'\/Date(1263798000000)\/'
    

    我正在使用 org.json.JSONObject .

    SomeKey 变成 java.Util.Date ?

    4 回复  |  直到 16 年前
        1
  •  8
  •   Yoni    16 年前

    日期格式在JSON中不是标准格式,所以您需要选择如何“传递”。我认为你看到的价值是以毫为单位的。

    System.out.println (new Date(1263798000000L));
    // prints: Mon Jan 18 09:00:00 IST 2010
    

    当然,这是在我的时区,但无论如何,这是一个相当近的日期。

    从日期构造函数的javadoc:


    日期-自1970年1月1日00:00:00 GMT以来的毫秒数。

    链接到此处的文档-> http://java.sun.com/javase/6/docs/api/java/util/Date.html#Date%28long%29

        2
  •  14
  •   Justin    14 年前

    public static Date JsonDateToDate(String jsonDate)
    {
        //  "/Date(1321867151710)/"
        int idx1 = jsonDate.indexOf("(");
        int idx2 = jsonDate.indexOf(")");
        String s = jsonDate.substring(idx1+1, idx2);
        long l = Long.valueOf(s);
        return new Date(l);
    }
    
        3
  •  2
  •   mxk    16 年前

    正如Yoni已经提到的,JSON没有定义日期是什么,也没有定义如何序列化日期。看看你发布的JSON片段,似乎有人觉得有点太有创意了,把这样的日期序列化了。

    这里需要注意的重要一点是:对于任何JSON解析器来说,这只是一个字符串。“日期(12345)”部分毫无意义。你必须自己把它解析成一个 java.util.Date 日期类型 .

    记录在案。使用JSON传递日期的典型方式是

    {'timestamp':1265231402}
    

    或者更有可能

    {'timestamp':'Wed, 03 Feb 2010 22:10:38 +0100'}
    

    后一个例子是使用标准RFC-2822格式的当前时间戳(我在写这篇文章时),可以使用Java的日期实用程序轻松解析。看看 SimpleDateFormat

        4
  •  0
  •   TapiwaJoel Mudavanhu    10 年前
        public String FormartDate(String date) {
            Calendar calendar = Calendar.getInstance();
            String datereip = date.replace("/Date(", "").replace(")/", "");
            Long timeInMillis = Long.valueOf(datereip);
            calendar.setTimeInMillis(timeInMillis);
    
            String DateFmtI;
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy");
            DateFmtI = simpleDateFormat.format(calendar.getTime());
            return DateFmtI;
        }