如何获得时间像Facebook的帖子,例如。 1秒前或3小时前,在Android应用程序中

时间:2014-08-01 12:06:30

标签: android android-date

我开发了一个应用程序,用户从其他应用程序用户那里收到消息。我想像Facebook一样展示时间,例如。 1秒前或3小时前。这种方式的东西。我尝试了我们的一位S.O专家的代码,但该代码似乎行为不端。 这是我在我的应用中使用的代码。

static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    static int[] steps = { 1, 60, 3600, 3600 * 24 };
    static String[] names = { "sec", "mins", "hrs", "days" };
public static String formatDelay(String date) {
        try {
            Date d = sdf.parse(date);
            Long stamp = d.getTime();
            Calendar c = Calendar.getInstance();

             Long now = System.currentTimeMillis() / 1000;

            Format format = new SimpleDateFormat("yyyy MM dd HH:mm:ss");
            String time = format.format(now);
            Long dif = now - stamp;
            dif = dif / 1000;
            if (stamp > now)
                return "";

            for (int i = 0; i < steps.length; i++) {
                if (dif < steps[i]) {
                    String output = Long.toString(dif / steps[i - 1]) + " "
                            + names[i - 1];
                    return output;
                }
            }

            return Long.toString(dif / steps[3]) + " " + names[3];

        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

当我使用此代码并从我的应用程序发送消息时,它应该显示我在1秒前发送,但在我的情况下,它显示我错误的时间延迟。例如。我在下午6点发送消息,然后当我在下午6:15检查我的应用程序发送项目时,它应该在15分钟前显示给我。但它显示我12小时。当我调试代码时,知道现在时间显示日期为1970 00:00:00,这是因为Long now = System.currentTimeMillis() / 1000;当我删除/1000时它会显示正确的日期和时间。我很清楚为什么会这样,请帮忙。

3 个答案:

答案 0 :(得分:1)

使用

android.text.format.DateUtils.getRelativeTimeSpanString (long time, long now, long minResolution, int flags) 

这将返回String格式

的时间跨度

例如。如果您在longtime flags中传递了对应于42分钟前的DateUtils.FORMAT_ABBREV_RELATIVE值,则该方法将返回42 minutes ago

官方文件DateUtils.getRelativeTimeSpanString

答案 1 :(得分:0)

我建议使用Joda-Time API。请参阅this answer以供参考。

答案 2 :(得分:0)

将System.currentTimeMillis()除以1000时,您将其值转换为秒。

然后您使用该值创建一个日期,该日期将秒值解释为自1970年1月1日以来的毫秒数,因此是日期差异。