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

日历开始日期早于结束日期同一天的差异

宗鸿博
2023-03-14

我有两个日历日期,我得到了天、小时和分钟之间的差异。

如果结束日期大于开始日期,则此操作非常有效。如果开始日期与结束日期在一周中的同一天,但早于结束日期,则不起作用。例如:结束日期为周六下午2:20,开始日期为周六下午7:20。它的计算时间大约为0天5小时。但是,应该是7天。

这是代码

    long t1 = curCal.getTimeInMillis();
    long t2 = setCal.getTimeInMillis();

    if(t2 < t1){
         days = t1-t2;
    }else{
         days = t2-t1;
    }

    long toDays = TimeUnit.MILLISECONDS.toDays(days);
    long toHours = TimeUnit.MILLISECONDS.toHours(days) % 24;
    long toMinutes = TimeUnit.MILLISECONDS.toMinutes(days) % 60;
    String toastMessage =   String.format(" %d Days %d Hours %d Minutes", toDays, toHours, toMinutes);
    Toast.makeText(context, "ALARM in"  + " " + toastMessage , Toast.LENGTH_LONG).show();

如何处理结束日期与开始日期同一天,但结束日期是开始日期之前的时间?

谢谢

编辑

我想我解决了我的问题。我为其他有同样问题的人添加它。如果end date=startdate(同日),则在日历对象中添加7作为enddate。伪代码

if (enddate == startdate)) {
   enddate.add(Calendar.DAY_OF_YEAR, 7);
}

共有2个答案

慕容雅珺
2023-03-14

以另一种方式阅读您的问题,如果t1是开始日期,t2是结束日期,那么您的逻辑不包括t1的情况

long t1 = curCal.getTimeInMillis();
long t2 = setCal.getTimeInMillis();

if(t2 < t1){
     days = t1-t2;
}else{
     days = t2-t1;
     if (days < 1) {
         days += 7;
     }
}

所有这些都可以简化为

days = Math.abs(t1 - t2);
if (days < 1 && t1 < t2) {
    days += 7;
}
孟成化
2023-03-14
    ZoneId zone = ZoneId.of("Europe/Busingen");

    DayOfWeek alarmDay = DayOfWeek.SUNDAY;
    LocalTime alarmTime = LocalTime.of(14, 20);
    ZonedDateTime now = ZonedDateTime.now(zone);

    ZonedDateTime alarmDateTime = now.with(alarmDay).with(alarmTime);
    if (alarmDateTime.isBefore(now)) {
        alarmDateTime = alarmDateTime.plusWeeks(1);
    }
    Duration difference = Duration.between(now, alarmDateTime);
    String toastMessage = String.format(" %d Days %d Hours %d Minutes",
            difference.toDaysPart(), difference.toHoursPart(), difference.toMinutesPart());
    System.out.println(toastMessage);

刚刚跑步(周日22:03:17,在比辛根),我得到:

6天16小时16分钟

我相信,我所提供的答案不仅是现代的,而且是更有力的。

  • 现代:日历类早已过时,按照今天的标准,设计也很糟糕。相反,我使用并推荐java。时间,现代Java日期和时间API

事实上,我是如此的现代,以至于我正在使用Java 9中引入的Duration类的toxxpart方法。要格式化持续时间,如果您尚未使用Java 9,则需要先从持续时间中减去天数来获得小时数:使用minusDays方法。然后用类似的方法计算分钟数。

    long toDays = difference.toDays();
    difference = difference.minusDays(toDays);
    long toHours = difference.toHours();
    difference = difference.minusHours(toHours);
    long toMinutes = difference.toMinutes();

是的,<代码>java。时间在旧的和新的Android设备上都能很好地工作。它至少需要Java 6。

  • 在Java 8和更高版本中,以及在较新的Android设备上(我听说是API级别26),内置了现代API
  • Oracle教程:解释如何使用java的日期时间。时间
  • Java规范请求(JSR)310,其中Java。首先描述了时间
  • ThreeTen Backport项目,java的Backport。Java 6和Java 7的时间(JSR-310为三十)
  • ThreeTenABP,Android版ThreeTen Backport
  • 问:如何在Android项目中使用ThreeTenABP,并给出了非常详尽的解释
 类似资料:
  • 问题内容: 我想检查日期是否在开始日期和结束日期之间。 我添加了一个where子句 但问题在于它不包含“ 2010-04-15”。 它应该包括结束日期,我该怎么办? 请帮我 问候, 潘卡 问题答案: 明确指定时间部分:

  • 我想在日期时间选择器中选择大于开始日期的结束日期时间。 当前,我正在开始日期时间和结束日期时间。 假设,我选择了时间为12:00 pm的当前日期,现在end date应该是时间为1:00 pm的当前日期。 我想要下面这样的东西 示例 开始日期和时间:---2019-11-06 12:00结束日期和时间:---2019-11-06 1:00 这是我的代码 null null

  • 问题内容: 好吧,假设我有一个看起来像这样的表: 任何人都有关于如何查询它的想法,因此数据看起来像 问题答案: 我不会将ID放在这里,因为我认为它与查询无关。如果您愿意,请稍后再说。这是一个MSSQL查询。 可以很容易地将其翻译为其他数据库类型。

  • 问题内容: 我一直在尝试从时间戳字段中的第一个日期到最后一个日期生成一系列日期(YYYY-MM-DD HH)。我已经有了所需的内容,但是在尝试从表中获取开始日期和结束日期时遇到了一个问题。我有以下一个大概的想法: Postgres 9.3 问题答案: 您不需要CTE,这将比必要的成本更高。 而且您不需要强制转换为,当您向类型提供数据时,结果已经 是 数据类型。详细信息在这里: 在PostgreSQ

  • 问题内容: 我有一个小问题,我正在开发一个应用程序,我需要将每周的开始日期从星期一更改为另一个(星期四,星期六)。在Android中这可能吗,我需要计算周的开始及其知道日期的结束。(例如,星期几从星期四开始) 注意:我只是android开发的初学者。这是我的代码SimpleDateFormat dateformate = new SimpleDateFormat(“ dd / MM”); 使用上面

  • 我有一个小问题,我正在开发一个应用程序,我需要将一周的开始日从星期一更改为另一个(星期四,星期六)。这在android中可能吗,我需要计算一周的开始和结束知道日期。(例如,一周从星期四开始) 注意:我只是android开发的初学者。这是我的代码SimpleDataFormat DateFormat=new SimpleDataFormat(“dd/MM”); 使用上面的代码,我得到了结果,但星期一