Java 如何从json格式化日期并将其设置为TextView
我得到的json响应为publishedAt:2017-09-12T01:03:08Z 我想将此响应格式化为简单的日期,如EAUG 12-09-2017 3:08,并将其设置为TextView 我用的是这样的东西Java 如何从json格式化日期并将其设置为TextView,java,android,date,Java,Android,Date,我得到的json响应为publishedAt:2017-09-12T01:03:08Z 我想将此响应格式化为简单的日期,如EAUG 12-09-2017 3:08,并将其设置为TextView 我用的是这样的东西 Date dateObj = new Date(currentNews.getTimeInString()); TextView dateAndTimeView = (TextView) listItemView.findViewById(R.id.date_and_time);
Date dateObj = new Date(currentNews.getTimeInString());
TextView dateAndTimeView = (TextView) listItemView.findViewById(R.id.date_and_time);
String formattedDateAndTime = formatDateAndTime(dateObj);
dateView.setText(formattedDate);
private String formatDateAndTime(Date dateObj){
SimpleDateFormat dateFormat = new SimpleDateFormat("dd MMM, yyyy");
return dateFormat.format(dateObj);
}
你试过SimpleDateFormat吗?
类似伪代码的东西,不能在这里测试
String givenDate = "2017-09-12T01:03:08Z";
SimpleDateFormat sdf= new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
try {
Date date = sdf.parse(givenDate );
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
试试这个代码
SimpleDateFormat formatter = new SimpleDateFormat(" EEE dd-MM-yyyy HH:mm");
请使用此方法:
public String getDateFromUTC(String ourDate)
{
try
{
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
Date value = formatter.parse(ourDate);
SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MM-yyyy hh:mm aa"); //this format changeable
dateFormatter.setTimeZone(TimeZone.getDefault());
ourDate = dateFormatter.format(value);
//Log.d("OurDate", OurDate);
}
catch (Exception e)
{
ourDate = "00-00-0000 00:00";
}
return ourDate;
}
TL;博士
时区至关重要
正如代码所示,它将生成Mon 11-09-2017 17:03。但是,请用正确的地区和城市替换所需的时区,这将反映在输出中。如果要使用JVM的时区设置,请使用ZoneId.systemDefault;但是,请注意,JVM中运行的其他代码可能会在您无法控制的情况下更改此设置,因此它不是完全可靠的
三级ABP
我从我的评论中得到了自己的良药:废弃日期和简化格式。所以上面的代码需要3TENABP。所有细节都在里面
ISO 8601
我进一步利用了一个事实,即JSON响应中的字符串是ISO 8601格式,现代日期和时间类“理解”为默认格式。如果它是其他格式,则需要一个单独的DateTimeFormatter来解析它;但这里没有过时的类,需要两种不同的SimpleDateFormat。到目前为止您尝试了什么?请在代码中分享您的尝试。即使在Android上,您尝试使用过时的长类Date和SimpleDateFormat,因为没有更好的内置类,我当然会警告不要使用不推荐使用的DateString构造函数。更好的是,停止使用这些类,开始使用。要在Android上使用它,你需要ThreeTenABP,请参阅。谢谢你的代码。顺便说一下,欢迎来到Stack Overflow。您还应该详细说明代码的行为与您想要的行为有何不同。如果您看到任何错误消息和/或stacktrace,请逐字引用。“寻求调试帮助的问题为什么此代码不起作用?必须包括…特定的问题或错误…没有明确问题说明的问题对其他读者无效。引用自
String formattedDateAndTime = Instant.parse("2017-09-12T01:03:08Z")
.atZone(ZoneId.of("America/Nome"))
.format(DateTimeFormatter.ofPattern("EEE dd-MM-uuuu H:mm", Locale.ENGLISH));