我正在开发一个新闻应用程序,并从这种模式中的json响应中获取日期和时间(2017-09-23T14:22:28Z)
。日期和时间转换
如何将此日期和时间转换为类似的内容(5秒前,10分钟前,3小时前等)? 过了24小时后,它应该显示该特定新闻标题(2017-09-23)的正常日期。
我正在开发一个新闻应用程序,并从这种模式中的json响应中获取日期和时间(2017-09-23T14:22:28Z)
。日期和时间转换
如何将此日期和时间转换为类似的内容(5秒前,10分钟前,3小时前等)? 过了24小时后,它应该显示该特定新闻标题(2017-09-23)的正常日期。
您可以使用我在聊天应用程序中实现的这段代码。
public class Utils
{
private static final int SECOND_MILLIS = 1000;
private static final int MINUTE_MILLIS = 60 * SECOND_MILLIS;
private static final int HOUR_MILLIS = 60 * MINUTE_MILLIS;
private static final int DAY_MILLIS = 24 * HOUR_MILLIS;
public static String getTimeAgo(long time, Context ctx) {
if (time < 1000000000000L) {
// if timestamp given in seconds, convert to millis
time *= 1000;
}
long now = getCurrentTime(ctx);
if (time > now || time <= 0) {
return null;
}
// TODO: localize
final long diff = now - time;
if (diff < MINUTE_MILLIS) {
return "just now";
} else if (diff < 2 * MINUTE_MILLIS) {
return "a minute ago";
} else if (diff < 50 * MINUTE_MILLIS) {
return diff/MINUTE_MILLIS + " minutes ago";
} else if (diff < 90 * MINUTE_MILLIS) {
return "an hour ago";
} else if (diff < 24 * HOUR_MILLIS) {
return diff/HOUR_MILLIS + " hours ago";
} else if (diff < 48 * HOUR_MILLIS) {
return "yesterday";
} else {
return diff/DAY_MILLIS + " days ago";
}
}
}
有作为第三方库的很多的,但你也可以参考:https://github.com/curioustechizen/android-ago
您可以考虑使用JodaTime库来管理所有的日期,时间和日历! 以下是Joda Time的一些代码。
public boolean isAfterPayDay(DateTime datetime) {
if (datetime.getMonthOfYear() == 2) { // February is month 2!!
return datetime.getDayOfMonth() > 26;
}
return datetime.getDayOfMonth() > 28;
}
public Days daysToNewYear(LocalDate fromDate) {
LocalDate newYear = fromDate.plusYears(1).withDayOfYear(1);
return Days.daysBetween(fromDate, newYear);
}
public boolean isRentalOverdue(DateTime datetimeRented) {
Period rentalPeriod = new Period().withDays(2).withHours(12);
return datetimeRented.plus(rentalPeriod).isBeforeNow();
}
public String getBirthMonthText(LocalDate dateOfBirth) {
return dateOfBirth.monthOfYear().getAsText(Locale.ENGLISH);
}
SimpleDateFormat simpledateformat = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss");
Date stringDate = simpledateformat.parse(aDate, 0);
DateUtils.getRelativeDateTimeString(this,d.getTime(), DateUtils.MINUTE_IN_MILLIS)
乔达时间是相当不错了这一点。
compile 'joda-time:joda-time:2.9.9'
String dateTime = "2017-09-21T14:22:28Z";
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
DateTime myBirthDate = format.parseDateTime(dateTime);
DateTime now = new DateTime();
Period period = new Period(myBirthDate, now);
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendSeconds().appendSuffix(" Sekonds ago\n")
.appendMinutes().appendSuffix(" Minutes ago\n")
.appendHours().appendSuffix(" Hours ago\n")
.appendDays().appendSuffix(" Days ago\n")
.appendWeeks().appendSuffix(" Weeks ago\n")
.appendMonths().appendSuffix(" Months ago\n")
.appendYears().appendSuffix(" Years ago\n")
.printZeroNever()
.toFormatter();
if (period.getDays()<1) {
String result = formatter.print(period);
System.out.println(result);
} else {
DateTimeFormatter format24hMore = DateTimeFormat.forPattern("yyyy-MM-dd");
String result = format24hMore.print(myBirthDate);
System.out.println(result);
}
编辑 创建方法
public String convertDate(String date) {
String result = "";
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
DateTime from = format.parseDateTime(date);
DateTime now = new DateTime();
Period period = new Period(from, now);
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendSeconds().appendSuffix(" Sekonds ago\n")
.appendMinutes().appendSuffix(" Minutes ago\n")
.appendHours().appendSuffix(" Hours ago\n")
.appendDays().appendSuffix(" Days ago\n")
.appendWeeks().appendSuffix(" Weeks ago\n")
.appendMonths().appendSuffix(" Months ago\n")
.appendYears().appendSuffix(" Years ago\n")
.printZeroNever()
.toFormatter();
if (period.getDays()<1) {
result = formatter.print(period);
} else {
DateTimeFormatter format24hMore = DateTimeFormat.forPattern("yyyy-MM-dd");
result = format24hMore.print(from);
}
return result;
}
,你可以调用此方法
System.out.println(convertDate("2017-09-21T14:22:28Z"));
就是这样吗?没有其他的 ?? – mani