是否有一个函数来计算两次之间的差异并显示相对结果?

kef*_*efs 1 android

我有一个按日期排序的数据库,在我的输出中,我想显示行之间经过的时间..像这样..

| 条目#1于08/10/2010 08:34 AM

| 条目#2于08/10/2010 09:45 AM | 自上次入境以来1小时11分钟

| 2010年11月8日上午06:57进入#3 自上次入境以来1天3小时12分钟

| 条目#4于08/11/2010 08:34 PM | 自上次入境以来13小时37小时

| 条目#5于09/11/2011 08:48 PM | 自上次入境以来1年1个月8分钟

我看过getRelativeTimeSpanString()但是1)它从现在开始计算&2)它附加了一个前缀/后缀.

有没有更简单的方法来做到这一点,除了创建一个自定义的约会方法,并将自己的所有条件与条件一起切割?

提前致谢.

Jur*_*uri 9

我没有在Android SDK中找到任何类似工作的东西(谷歌在GWT框架中包括一个...也许可以把它拿出来).

但是因为它并不太难我自己写了一个DateUtils类,它做了类似的工作.我喜欢友好的日期格式,也可以在Gmail中使用,例如"昨天"或"2分钟前",而不是像13/08/2010或10:30 PM这样的日期.

关于时差的问题,我写了以下内容

public static String getDifference(Date sessionStart, Date sessionEnd) {
    if(sessionStart == null)
        return "[corrupted]";

    Calendar startDateTime = Calendar.getInstance();
    startDateTime.setTime(sessionStart);

    Calendar endDateTime = Calendar.getInstance();
    endDateTime.setTime(sessionEnd);

    long milliseconds1 = startDateTime.getTimeInMillis();
    long milliseconds2 = endDateTime.getTimeInMillis();
    long diff = milliseconds2 - milliseconds1;

    long hours = diff / (60 * 60 * 1000);
    long minutes = diff / (60 * 1000);
    minutes = minutes - 60 * hours;
    long seconds = diff / (1000);

    if (hours > 0) {
        return hours + " hours " + minutes + " minutes";
    } else {
        if (minutes > 0)
            return minutes + " minutes";
        else {
            return seconds + " seconds";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

..这里是相应的单元测试来验证正确的功能:

    @Test
    public void testGetDifference() {
        // hours and minutes
        Date startDate = DateUtils.createDateInstance("01.01.2010 12:00:00");
        Date endDate = DateUtils.createDateInstance("01.01.2010 13:12:00");

        String difference = DateUtils.getDifference(startDate, endDate);
        assertNotNull(difference);
        assertEquals("1 hours 12 minutes", difference);

        // minutes
        startDate = DateUtils.createDateInstance("01.01.2010 12:00:00");
        endDate = DateUtils.createDateInstance("01.01.2010 12:02:00");

        difference = DateUtils.getDifference(startDate, endDate);
        assertNotNull(difference);
        assertEquals("2 minutes", difference);

        // seconds
        startDate = DateUtils.createDateInstance("01.01.2010 12:00:00");
        endDate = DateUtils.createDateInstance("01.01.2010 12:00:15");

        difference = DateUtils.getDifference(startDate, endDate);
        assertNotNull(difference);
        assertEquals("15 seconds", difference);

        difference = DateUtils.getDifference(null, endDate);
        assertEquals("[corrupted]", difference);
    }
Run Code Online (Sandbox Code Playgroud)

您可能需要稍微调整一下并将硬编码字符串外部化("小时","分钟",......),以便更容易本地化(如果这对您来说是个问题).

作为参考,它可能也值得看看JodaTime lib.也许他们有类似的实现,但我没有验证我自己(还).