我有一个像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();
}
答案 0 :(得分:2)
此解决方案会跳过旧SimpleDateFormat
和Date
,而是使用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();
}
希望对你有所帮助。如果你有任何问题可以提出来。