我正在使用Volley
从Api获取数据。我正在以此格式2018-04-04T08:41:21.265185Z
收到时间和日期。我想以RecyclerView
格式将时间设置为本地时间格式8:41 PM
。
这是转换时间的代码
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
dateFormat.setTimeZone(TimeZone.getDefault());
try {
Date date=dateFormat.parse(bookingTime);
TimeZone zone=TimeZone.getDefault();
dateFormat.setTimeZone(zone);
finalTime=dateFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
这是用于将转换时间设置为ReyclerView
的代码JsonArrayRequest request = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
try {
for (int i = 0; i < response.length(); i++) {
JSONObject object = response.getJSONObject(i);
final CurrentEntry entry = new CurrentEntry();
String id = object.getString("myid");
String Time=object.getString("time");
SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
dateFormat.setTimeZone(TimeZone.getDefault());
try {
Date date=dateFormat.parse(Time);
TimeZone zone=TimeZone.getDefault();
dateFormat.setTimeZone(zone);
finalTime=dateFormat.format(date);
} catch (ParseException e) {
e.printStackTrace();
}
JsonObjectRequest foodie_request = new JsonObjectRequest(Request.Method.GET, myurl, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
String fname = response.getString("fname");
String lname = response.getString("lname");
entry.setName(first_name + "\t" + last_name);
// progressDialog.dismiss();
adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
})
};
AppController.getInstance().addToRequestQueue(foodie_request, foodie_data_req);
String no = object.getString("no");
String ptime = object.getString("pt");
entry.setP(people);
entry.setT(finalTime);
current.add(entry);
adapter = new CurrentStatusAdapter(current, getActivity().getApplicationContext());
recyclerView.setAdapter(adapter);
}
如何转换和设置此时间?
答案 0 :(得分:1)
我认为您的dateTime 2018-04-04T08:41:21.265185Z
缺少TIMEZONE Z
格式 - yyyy-MM-dd'T'HH:mm:ss.SSSZ
输出 - 2001-07-04T12:08:56.235-0700
或强> 样本 -
try {
DateFormat f = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ");
Date d = f.parse("2018-04-04T08:41:21.265185");
DateFormat date = new SimpleDateFormat("MM/dd/yyyy");
DateFormat time = new SimpleDateFormat("hh:mm a");
System.out.println("Date: " + date.format(d));
System.out.println("Time: " + time.format(d));
} catch (Exception e) {
e.printStackTrace();
}
答案 1 :(得分:1)
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("h:mm a", Locale.ENGLISH);
String bookingTimeString = "2018-04-04T08:41:21.265185Z";
Instant bookingTime = Instant.parse(bookingTimeString);
String finalTime = bookingTime.atZone(ZoneId.systemDefault()).format(timeFormatter);
System.out.println(finalTime);
在我在欧洲/哥本哈根时区的电脑上打印出来:
上午10:41
所以时间已根据您的要求转换为我当地的时间。
我使用的是现代Java日期和时间API java.time
。即使在Android上,即使java.time
仅内置在新的Android设备上,也可以考虑丢掉过时的,臭名昭着的SimpleDateFormat
和朋友。现代API使用起来非常好,并且在旧设备上也能很好地工作,详见下文。
来自Instant
的{{1}}类解析您收到的字符串,而不使用任何明确的格式化程序。这是因为字符串是ISO 8601格式,现代类解析为默认格式的标准格式。鉴于Stack Overflow上关于日期时间格式模式字符串问题的问题数量,这似乎是一个相当大的优势。
是的,java.time
适用于较旧和较新的Android设备。它只需要至少Java 6 。
java.time
导入日期和时间类。org.threeten.bp
。java.time
。java.time
向Java 6和7的后端(JST-310的ThreeTen)。