如何在Android中获得准确的TimeAgo

时间:2014-12-12 09:29:38

标签: android timeago

现在我正在使用Android Time Ago,我几天前就已经开始了,但几周前没有这样做

我试过这里:

CharSequence    CS = DateUtils.getRelativeTimeSpanString(DateUtils.MINUTE_IN_MILLIS, now.getTime(),
                    DateUtils.WEEK_IN_MILLIS, 0);

正是我所需要的是,如果它不到一周应该显示这些日子重生。

如果一周以上显示一个月或一个月应显示一个月前或两个月前,就像继续

我怎么能得到这个可以任何人帮助我。

2 个答案:

答案 0 :(得分:0)

你不能通过DateUtils的现有方法来做到这一点。您可以使用此实现,但请记住,它仅适用于过去(周,月,年)。如果你想处理未来,那么你需要关心这个用例。

public static final long AVERAGE_MONTH_IN_MILLIS = DateUtils.DAY_IN_MILLIS * 30;

private String getRelationTime(long time) {
    final long now = new Date().getTime();
    final long delta = now - time;
    long resolution;
    if (delta <= DateUtils.MINUTE_IN_MILLIS) {
        resolution = DateUtils.SECOND_IN_MILLIS;
    } else if (delta <= DateUtils.HOUR_IN_MILLIS) {
        resolution = DateUtils.MINUTE_IN_MILLIS;
    } else if (delta <= DateUtils.DAY_IN_MILLIS) {
        resolution = DateUtils.HOUR_IN_MILLIS;
    } else if (delta <= DateUtils.WEEK_IN_MILLIS) {
        resolution = DateUtils.DAY_IN_MILLIS;
    } else if (delta <= AVERAGE_MONTH_IN_MILLIS) { 
        return Integer.toString((int) (delta / DateUtils.WEEK_IN_MILLIS)) + " weeks(s) ago";
    } else if (delta <= DateUtils.YEAR_IN_MILLIS) {
        return Integer.toString((int) (delta / AVERAGE_MONTH_IN_MILLIS)) + " month(s) ago";
    } else {
        return Integer.toString((int) (delta / DateUtils.YEAR_IN_MILLIS)) + " year(s) ago";
    }
    return DateUtils.getRelativeTimeSpanString(time, now, resolution).toString();
}

答案 1 :(得分:0)

您可以使用我的库(Timeago)来获取Java / Android的确切Timeago,关于显示过去和将来的日期时间值,您可以检查此示例的当前时间:

long timeInMillis = System.currentTimeMillis();
String text = TimeAgo.using(timeInMillis);

对于将来的日期,您可以使用java.util.Calendar类,并设置大于当前日期的日期值,然后将时间作为长型输入,作为该类的输入。