Android从时间点计算分钟/小时/天

Pat*_*ick 3 java twitter datetime android date

我正在解析twitters,我想显示自推特发布以来多久以来.但它似乎没有正确计算.我从Stackoverflow上的另一个帖子得到了公式,我试图从它构建return语句.

public static String getTwitterDate(Date date){
    long milliseconds = date.getTime();
    int minutes = (int) ((milliseconds / (1000*60)) % 60);
    int hours   = (int) ((milliseconds / (1000*60*60)) % 24);

    if (hours > 0){
        if (hours == 1)
            return "1 hour ago";
        else if (hours < 24)
            return String.valueOf(hours) + " hours ago";
        else
        {
            int days = (int)Math.ceil(hours % 24);
            if (days == 1)
                return "1 day ago";
            else
                return String.valueOf(days) + " days ago";
        }
    }
    else
    {
        if (minutes == 0)
            return "less than 1 minute ago";
        else if (minutes == 1)
            return "1 minute ago";
        else
            return String.valueOf(minutes) + " minutes ago";
    }
}
Run Code Online (Sandbox Code Playgroud)

使用此解析twitter日期/时间(也来自Stackoverflow上的帖子)

public static Date parseTwitterDate(String date)
{
    final String TWITTER = "EEE, dd MMM yyyy HH:mm:ss Z";
    SimpleDateFormat sf = new SimpleDateFormat(TWITTER, Locale.ENGLISH);
    sf.setLenient(true);

    try {
        return sf.parse(date);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

推特日期示例:"created_at":"星期六,2012年6月30日14:44:40 +0000",

据我所知,twitters正确解析但未正确计算(getTwitterDate).当它相差4-5小时时,有时会返回11个小时.

tig*_*chi 10

使用DateUtils.它是完全本地化的,以人性化的方式做你想做的事.

以下是获取自动本地化的相对时间跨度表达式的示例:

long time = ... // The Twitter post time stamp
long now = System.currentTimeMillis();
CharSequence relativeTimeStr = DateUtils.getRelativeTimeSpanString(time, 
    now, DateUtils.SECOND_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE);
Run Code Online (Sandbox Code Playgroud)

它产生诸如"10秒前"或"5分钟"的输出.


ass*_*ias 5

long milliseconds = date.getTime() - new Date().getTime();

这将根据推文日期和现在之间的差异运行计算。

目前,您的计算基于date.getTime()自 1970 年 1 月 1 日午夜以来的毫秒数。因为您还引入了模数,所以您当前的函数为您提供了午夜 UTC 和推文之间经过的时间。