Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从json格式化日期并将其设置为TextView_Java_Android_Date - Fatal编程技术网

Java 如何从json格式化日期并将其设置为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);

我得到的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);
        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));