在屏幕上显示之前,从JSON对象更改日期

时间:2018-02-21 15:00:21

标签: java android json android-recyclerview

我有一个应用程序从JSON文件,(“名称”,“日期”,“picture_url”)获取数据并在RecyclerView上显示,但是...日期是用unix,所以我需要取每个“日期”JSON对象并将其值更改为正确的日期格式,然后再显示在屏幕上。

所以我写了类似的东西:

long dv = Long.valueOf(o.getString("date"))*1000;
Date df = new java.util.Date(dv);
String vv = new SimpleDateFormat("yyyy-MM").format(df);
o.getString("date").equals(vv);

在此:

StringRequest stringRequest = new StringRequest(
            Request.Method.GET,
            URL_DATA,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    progressDialog.dismiss();
                            try {
                        JSONArray array = new JSONArray(response);

                        for(int i=0; i<array.length(); i++) {
                            JSONObject o = array.getJSONObject(i);
                            ListItem item = new ListItem(
                                    o.getString("name"),
                                    o.getString("date"),
                                    o.getString("picture_url"
                                    )
                            );
                            long dv = Long.valueOf(o.getString("date"))*1000;
                            Date df = new java.util.Date(dv);
                            String vv = new SimpleDateFormat("yyyy-MM").format(df);
                            o.getString("date").equals(vv);
                            listItems.add(item);
                        }
                        adapter = new MyAdapter(listItems, getApplicationContext());
                        recyclerView.setAdapter(adapter);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {
                }
            }
    );

但它不起作用。 SDK没有显示任何错误,也没有显示新的想法。 那么我怎样才能在显示应用程序界面之前将我的“约会”更改并更改?

4 个答案:

答案 0 :(得分:0)

使用此方法:

private static String getDate(long time) {
        Calendar cal = Calendar.getInstance(Locale.ENGLISH);
        cal.setTimeInMillis(time);
        return DateFormat.format("dd-MM-yyyy", cal).toString();
    }

答案 1 :(得分:0)

您可以使用此功能

public String timestampToFormatedString(long timeStamp,String format ){

    Date date = new Date(timeStamp);
    DateFormat formatter = new SimpleDateFormat(format);
    return formatter.format(date);
}

最后

String formatedDateString=timestampToFormatedString("dd-MM-yyyy",timeStamp);

答案 2 :(得分:0)

要使用新的字符串表示形式修改原始JSONObject,您应该使用put方法:

    long dv = Long.valueOf(o.getString("date"));
    YearMonth ym = YearMonth.from(
            Instant.ofEpochSecond(dv).atZone(ZoneId.systemDefault()));
    o.put("date", ym.toString());

同时,此代码段演示了另一项更改:使用java.time,现代Java日期和时间API,而不是DateSimpleDateFormat。这项改变对于工作不是必需的,但我推荐它。您使用的日期时间类已经过时了,特别是SimpleDateFormat非常麻烦。请注意,使用现代API,您不需要显式格式化程序来获取2017-07之类的字符串,因为YearMonth.toString生成了这样的字符串。此外,API可以在几秒钟内直接从Unix时间转换,因此您的读者无需想知道为什么要乘以1000。

问题:我可以在我的Java版本中使用java.time吗?

是的,java.time在Android设备上运行良好。它至少需要 Java 6

  • 在Java 8及更高版本和新的Android设备上(来自API级别26,我被告知)新的API内置。
  • 在Java 6和7中获取ThreeTen Backport,这是新类的后端(JST 310的ThreeTen,其中首次描述了现代API)。
  • 在(较旧的)Android上,使用Android版的ThreeTen Backport。它被称为ThreeTenABP。确保从包org.threeten.bp和子包中导入日期和时间类。

链接

答案 3 :(得分:0)

首先:你的所有答案都有我可以使用的好方法,但我没有要求方法,因为我有一个合适的方法。无论如何,谢谢你的答案。

我发现的最简单的解决方案是:

 for (int i = 0; i < array.length(); i++) {
                            JSONObject o = array.getJSONObject(i);
                            long dv = Long.valueOf(o.getString("date")) * 1000L;
                            Date df = new java.util.Date(dv);
                            String vv = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(df);
                            ListItem item = new ListItem(
                                    o.getString("name")
                                    , vv
                                    , o.getString("picture_url")

                            );
                            listItems.add(item);

我的代码中有一小部分被误解了,所以我需要将这些代码放回几行并更改一行。