格式日期从yyyy-MM-dd'T'hh:mm:ss.SSS'Z'“到星期六20五月,06:00

时间:2017-05-21 16:13:30

标签: java android datetime

我有一个像String这样的日期

2017-05-20T18:00:56Z

我想转换这样的东西,星期六,5月20日,06:00

我该怎么做?我尝试下面的代码,但似乎没有工作,也有很多相似的帖子,但不适合我

        SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS'Z'");
        try {
            Date myDate = myFormat.parse(actorList.get(position).getPublishedat());
            holder.publishedat.setText(myDate.toString());
        } catch (ParseException e) {
            e.printStackTrace();
        }

2 个答案:

答案 0 :(得分:2)

此解决方案会跳过旧SimpleDateFormatDate,而是使用JSR-310中描述的较新类。他们通常对程序员更友好。

    String formattedDate = Instant.parse(publishedAt)
            .atOffset(ZoneOffset.UTC)
            .format(DateTimeFormatter.ofPattern("EEE dd'th' MMM, hh:mm", Locale.ENGLISH));

打印

Sat 20th May, 06:00

请注意,我们现在已经失去了时间是在上午还是下午。 06:00可能意味着上午6点或下午6点。您可能想再次考虑这是否是您想要的。如果没有,只需根据需要修改代码中的格式模式字符串,并询问是否有疑问。我在UTC时区打印时间,假设这是你想要的。

您还会注意到我没有给出解析字符串的明确格式。这是因为你的字符串符合ISO 8601,这是JSR-310类“理解”的默认值。

当日期是5月20日时,这一切都非常好。第二天怎么样?我们不希望21th May,而是21st。这就是JSR-310课程显示其真正优势的地方:获得一天中的日期非常简单和安全,因此我们可以检查它是否是一个月的第1天,第2天或第21天:

    OffsetDateTime dateTime = Instant.parse(publishedAt).atOffset(ZoneOffset.UTC);
    String numberSuffix = "th";
    if (dateTime.getDayOfMonth() == 1 || dateTime.getDayOfMonth() == 21
            || dateTime.getDayOfMonth() == 31) {
        // print for example 01st or 21st
        numberSuffix = "st";
    } else if (dateTime.getDayOfMonth() == 2 || dateTime.getDayOfMonth() == 22) {
        numberSuffix = "nd";
    } else if (dateTime.getDayOfMonth() == 3 || dateTime.getDayOfMonth() == 23) {
        numberSuffix = "rd";
    }
    String formatPattern = "EEE dd'" + numberSuffix + "' MMM, hh:mm";
    DateTimeFormatter formatter 
            = DateTimeFormatter.ofPattern(formatPattern, Locale.ENGLISH);

通过此更改,我们也可以得到

的结果
Sun 21st May, 06:00

要在Android上使用JSR-310类,您需要获得ThreeTenABP。我在下面提供了几个链接。对于使用Java 8或更高版本的任何人来说,它们都内置在java.time包中。

链接

答案 1 :(得分:0)

请尝试这样

SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSS'Z'");
String displayformat="EEE dd MMM, hh:mm";
SimpleDateFormat destFormat=new SimpleDateFormat(displayformat);

        try {
            Date myDate = myFormat.parse(actorList.get(position).getPublishedat());
            holder.publishedat.setText(destFormat.format(myDate));
        } catch (ParseException e) {
            e.printStackTrace();
        }

希望对你有所帮助。如果你有任何问题可以提出来。