当前位置: 首页 > 知识库问答 >
问题:

两次约会之间的天数

查宜修
2023-03-14

我想比较我的Android应用程序的两个日期,但我遇到了一个非常奇怪的问题。

例如:

如果我将过去的日期设置为127天前:

this.dateEvent = System.currentTimeMillis() - (127 * 24 * 3600 * 1000)

然后将其与当前日期(两天之间)进行比较

    Calendar sDate = getDatePart(new Date(this.dateEvent));
    Calendar eDate = getDatePart(new Date(System.currentTimeMillis()));

    int daysBetween = 0;
    while (sDate.before(eDate))
    {
        sDate.add(Calendar.DAY_OF_MONTH, 1);
        daysBetween ++;
    }

    while (sDate.after(eDate))
    {
        eDate.add(Calendar.DAY_OF_MONTH, 1);
        daysBetween ++;
    }

    return daysBetween;

它将返回22个,这完全不是预期的结果。

我做错了什么吗?还是日历类有问题?


共有3个答案

秋兴思
2023-03-14

我终于找到了最简单的方法来处理这个问题。这是我的代码:

public int getTimeRemaining()
{
    Calendar sDate = toCalendar(this.dateEvent);
    Calendar eDate = toCalendar(System.currentTimeMillis());

    // Get the represented date in milliseconds
    long milis1 = sDate.getTimeInMillis();
    long milis2 = eDate.getTimeInMillis();

    // Calculate difference in milliseconds
    long diff = Math.abs(milis2 - milis1);

    return (int)(diff / (24 * 60 * 60 * 1000));
}

private Calendar toCalendar(long timestamp)
{
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(timestamp);
    calendar.set(Calendar.HOUR_OF_DAY, 0);
    calendar.set(Calendar.MINUTE, 0);
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);
    return calendar;
}

希望能有帮助。

从元明
2023-03-14

请参考此代码,这可能会对您有所帮助。

public String getCountOfDays(String createdDateString, String expireDateString) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());

    Date createdConvertedDate = null, expireCovertedDate = null, todayWithZeroTime = null;
    try {
        createdConvertedDate = dateFormat.parse(createdDateString);
        expireCovertedDate = dateFormat.parse(expireDateString);

        Date today = new Date();

        todayWithZeroTime = dateFormat.parse(dateFormat.format(today));
    } catch (ParseException e) {
        e.printStackTrace();
    }

    int cYear = 0, cMonth = 0, cDay = 0;

    if (createdConvertedDate.after(todayWithZeroTime)) {
        Calendar cCal = Calendar.getInstance();
        cCal.setTime(createdConvertedDate);
        cYear = cCal.get(Calendar.YEAR);
        cMonth = cCal.get(Calendar.MONTH);
        cDay = cCal.get(Calendar.DAY_OF_MONTH);

    } else {
        Calendar cCal = Calendar.getInstance();
        cCal.setTime(todayWithZeroTime);
        cYear = cCal.get(Calendar.YEAR);
        cMonth = cCal.get(Calendar.MONTH);
        cDay = cCal.get(Calendar.DAY_OF_MONTH);
    }


    /*Calendar todayCal = Calendar.getInstance();
    int todayYear = todayCal.get(Calendar.YEAR);
    int today = todayCal.get(Calendar.MONTH);
    int todayDay = todayCal.get(Calendar.DAY_OF_MONTH);
    */

    Calendar eCal = Calendar.getInstance();
    eCal.setTime(expireCovertedDate);

    int eYear = eCal.get(Calendar.YEAR);
    int eMonth = eCal.get(Calendar.MONTH);
    int eDay = eCal.get(Calendar.DAY_OF_MONTH);

    Calendar date1 = Calendar.getInstance();
    Calendar date2 = Calendar.getInstance();

    date1.clear();
    date1.set(cYear, cMonth, cDay);
    date2.clear();
    date2.set(eYear, eMonth, eDay);

    long diff = date2.getTimeInMillis() - date1.getTimeInMillis();

    float dayCount = (float) diff / (24 * 60 * 60 * 1000);

    return ("" + (int) dayCount + " Days");
}
公西俊民
2023-03-14

这里有一个两行解决方案

long msDiff = Calendar.getInstance().getTimeInMillis() - testCalendar.getTimeInMillis();
long daysDiff = TimeUnit.MILLISECONDS.toDays(msDiff);

在本例中,它获取日期“testCalendar”和当前日期之间的天数。

 类似资料:
  • 我使用获取给定时间段s的天数。 它似乎对大多数情况都有效,但是整整一个月,我有一段时间是零天。 以下测试用例失败(

  • 问题内容: 我一直在寻找Android API,并且一直在寻找一种方法来计算当前日期和未来日期之间的天数。我对android很陌生,几年来我还没有做过Java。什么是最简单的计算方法? 谢谢 问题答案: 最简单的方法是为此使用Joda Time Days类:

  • 问题内容: 查看两个日期之间有多少整天的最短方法是什么?这就是我现在正在做的。 问题答案: 假设您确实有两个日期对象,则可以从另一个对象中减去一个,然后查询结果对象的天数: 它也适用于日期时间-我认为它会四舍五入到最近的日期:

  • 问题内容: 我有一个航班行程计划,需要获取出发时间和到达时间之间的差额。我从数据中获得这些指定的时间作为字符串。这是我的问题: 输出: 第一次返回11:39和14:35之间的差异就好了。但是第二个区别只是5小时,而应该是19小时。我该怎么解决,我在做什么错呢? 任何帮助将不胜感激。 编辑:我正在使用图形来存储我的数据。两个机场之间的最短路线的示例是这样的: 这些是使我们从EDI飞往SYD的3航班。

  • 我有项目租赁应用程序。我需要决定在date_finish和date_start(包括这些日期)之间的日期中是否有car可用。我有模型车和订单。订单有很少的字段:和、如何只取这些在start_date和stop_date之间可用的CARID(包括这两天)。 汽车: 订单: 状态:1为新订单,2为当前持续的订单,3为存档/已完成的订单 mongoose查询: 那个查询不起作用。谁能帮我? 编辑:我必须

  • 问题内容: 在我的应用中,我创建了一个代表高中班级的对象。该对象包含2个Calendar对象,分别代表班级每天的开始和结束时间。当用户创建作业时,我要检查当前时间是否在任何课程的两次之间。如果是的话,我知道作业是在该课程中创建的。这是我当前无法使用的代码,因为.getTime()返回一个包含月和日的日期,而我只想比较小时和分钟。因此,如何修剪返回的日期,使其仅包含一天中的时间?使用joda- ti