我开发了一个应用程序,用户从其他应用程序用户那里收到消息。我想像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
时它会显示正确的日期和时间。我很清楚为什么会这样,请帮忙。
答案 0 :(得分:1)
使用
android.text.format.DateUtils.getRelativeTimeSpanString (long time, long now, long minResolution, int flags)
这将返回String
格式
例如。如果您在long
和time
flags
中传递了对应于42分钟前的DateUtils.FORMAT_ABBREV_RELATIVE
值,则该方法将返回42 minutes ago
答案 1 :(得分:0)
我建议使用Joda-Time API。请参阅this answer以供参考。
答案 2 :(得分:0)
将System.currentTimeMillis()除以1000时,您将其值转换为秒。
然后您使用该值创建一个日期,该日期将秒值解释为自1970年1月1日以来的毫秒数,因此是日期差异。