我有一个应用程序从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没有显示任何错误,也没有显示新的想法。 那么我怎样才能在显示应用程序界面之前将我的“约会”更改并更改?
答案 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,而不是Date
和SimpleDateFormat
。这项改变对于工作不是必需的,但我推荐它。您使用的日期时间类已经过时了,特别是SimpleDateFormat
非常麻烦。请注意,使用现代API,您不需要显式格式化程序来获取2017-07
之类的字符串,因为YearMonth.toString
生成了这样的字符串。此外,API可以在几秒钟内直接从Unix时间转换,因此您的读者无需想知道为什么要乘以1000。
java.time
吗?是的,java.time
在Android设备上运行良好。它至少需要 Java 6 。
org.threeten.bp
和子包中导入日期和时间类。java.time
。答案 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);
我的代码中有一小部分被误解了,所以我需要将这些代码放回几行并更改一行。