【问题标题】:How to format date from json and set it into TextView如何从 json 格式化日期并将其设置为 TextView
【发布时间】:2017-09-12 05:59:07
【问题描述】:

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

【问题讨论】:

  • 到目前为止你尝试了什么??
  • 请在代码中分享您的尝试。
  • 即使在 Android 上你很想使用早已过时的类 DateSimpleDateFormat(因为没有更好的内置),我当然会警告不要使用已弃用的 Date(String)构造函数。更好的是,停止使用这些类并开始使用the modern Java date and time API。要在 Android 上使用它,您需要 ThreeTenABP,请参阅 this question
  • 感谢您的代码。顺便说一句,欢迎来到 Stack Overflow。您还应该说明您的代码行为与您想要的行为有何不同。如果您看到任何错误消息和/或堆栈跟踪,请逐字引用。
  • “寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括……一个特定的问题或错误……。没有明确问题陈述的问题对其他读者没有用处。” 引自What topics can I ask about here?

标签: java android date


【解决方案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();
}

【讨论】:

    【解决方案2】:

    请使用此方法:

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

    【讨论】:

      【解决方案3】:

      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 来解析它;但不是在这里(对于过时的类,需要两个不同的SimpleDateFormats)。

      【讨论】:

        【解决方案4】:

        试试这个代码。

        SimpleDateFormat formatter = new SimpleDateFormat(" EEE dd-MM-yyyy HH:mm");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-02-18
          • 1970-01-01
          • 2013-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多