如何从json格式化日期并将其设置为TextView

时间:2017-09-12 05:59:08

标签: java android date

我的json响应为"publishedAt": "2017-09-12T01:03:08Z" 我想在Aug 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);
    }

4 个答案:

答案 0 :(得分:1)

你试过SimpleDateFormat吗? https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

类似的东西(伪代码,不能在这里测试)

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();
}

答案 1 :(得分:1)

请使用此方法:

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;
    }

答案 2 :(得分:1)

<强> TL; DR

    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));

时区至关重要

代码代表它产生Mon 11-09-2017 17:03。但是,请将正确的地区和城市替换为您想要的时区,这将反映在输出中。如果要使用JVM的时区设置,请使用ZoneId.systemDefault();但是,请注意,在JVM中运行的其他代码可能会在您的控件之外更改此设置,因此它并不完全可靠。

<强> ThreeTenABP

我从我的评论中采取了自己的药物:扔掉DateSimpleDateFormat。所以上面的代码需要 ThreeTenABP 。所有细节都在this question: How to use ThreeTenABP in Android Project

ISO 8601

我进一步利用了JSON响应中的字符串是ISO 8601格式的事实,现代日期和时间类“理解”为默认值。如果它采用其他格式,则需要单独的DateTimeFormatter来解析它;但不在这里(对于过时的课程,需要两个不同的SimpleDateFormat。)

答案 3 :(得分:0)

试试这段代码。

Date        Month   PRICE   product contract_month  Contract_year
7-Jun-17    17-Sep  -79     XYZ     9                2017
7-Jun-17    17-Oct  -75     XYZ     10               2017
7-Jun-17    17-Jul  -92     XYZ     7                2017
7-Jun-17    17-Aug  -90     XYZ     8                2017
7-Jun-17    18-Sep  -95     XYZ     9                2018
7-Jun-17    18-Oct  -96     XYZ     10               2018
7-Jun-17    18-Nov  -97     XYZ     11               2018