Java 如何检查当前时间和自定义时间是否在30分钟的设备时间段(挂钟时间)内

Java 如何检查当前时间和自定义时间是否在30分钟的设备时间段(挂钟时间)内,java,android,date,datetime,android-dateutils,Java,Android,Date,Datetime,Android Dateutils,我有一个独特的问题,我必须确定两件事 1) 如果我的当前时间和自定义时间在同一个30分钟的时间段内(假设是下午2:10,自定义时间是下午2:22,我希望看到它们在2到2:30的同一时间段内),但如果当前时间是下午1:55,自定义时间是下午2:15,则不应在同一时间段内(30分钟差异,但不在同一设备/时钟时间段内,一个为下午1:30至2:30,另一个为下午2:30) 2) 现在,在30分钟的同一时间段内,如果当前时间早于自定义时间,我想返回true,否则返回false。有没有办法计算这个? 我希望

我有一个独特的问题,我必须确定两件事

1) 如果我的当前时间和自定义时间在同一个30分钟的时间段内(假设是下午2:10,自定义时间是下午2:22,我希望看到它们在2到2:30的同一时间段内),但如果当前时间是下午1:55,自定义时间是下午2:15,则不应在同一时间段内(30分钟差异,但不在同一设备/时钟时间段内,一个为下午1:30至2:30,另一个为下午2:30)

2) 现在,在30分钟的同一时间段内,如果当前时间早于自定义时间,我想返回true,否则返回false。有没有办法计算这个? 我希望在我的公共utils类中添加一个自定义函数,在这里我可以为它提供自定义时间和当前时间,并查看结果,因此使用一些通用的东西会很有用。 有什么想法吗

我看过:和其他文章,但没有任何文章描述30分钟的设备/时钟时隙周期

任何关于if的想法都能帮助我操作这个精确的逻辑,android中的任何自定义函数/库都能帮助我实现这一点。真的很有帮助

软件包演示;
package Demo;

import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
public class Test1 {
    public static void main(String arg[]) {
        LocalDateTime ct = LocalDateTime.now();
        LocalDateTime custemTime = ct.plusMinutes(5);
        System.out.println(ct);
        System.out.println(custemTime)  ;
        System.out.println(isInSameSlots(ct,custemTime));

    }   
    static boolean   isInSameSlots(LocalDateTime ldt1, LocalDateTime ltd2) {
        Long timeDiff = ChronoUnit.MINUTES.between(ldt1, ltd2);
        if(timeDiff > 30 || timeDiff < 0) 
           return false;
        return (ldt1.getMinute() <= 30 && ltd2.getMinute() <= 30) || (ldt1.getMinute() > 30 && ltd2.getMinute() > 30 ) ? true : false; 

    }

}
导入java.time.LocalDateTime; 导入java.time.temporal.ChronoUnit; 导入java.util.array; 公共类Test1{ 公共静态void main(字符串arg[]){ LocalDateTime ct=LocalDateTime.now(); LocalDateTime custemTime=ct.plusMinutes(5); 系统输出打印项次(ct); System.out.println(custemTime); 系统输出打印LN(isInSameSlots(ct,客户时间)); } 静态布尔isInSameSlots(LocalDateTime ldt1、LocalDateTime ltd2){ Long-timeDiff=ChronoUnit.MINUTES.between(ldt1,ltd2); 如果(timeDiff>30 | | timeDiff<0) 返回false; 返回(ldt1.getMinute()30)?真:假; } }
案例1

2019-06-10T18:40:09.122

2019-06-10T18:45:09.122

真的

案例2) 2019-06-10T18:46:56.350 2019-06-10T19:06:56.350
false

您当前使用的日期时间API是什么<代码>日历或日期时间API或
ThreeTenBNP的任何其他
Joda时间
?您添加的已为您的que提供了答案。我看到的唯一一件事是,你需要先计算两个日期作为间隔的开始时间和结束时间。我在代码的其他部分使用ThreeTenBNP,但不确定如何进行,因为它基于时钟时间槽。如何计算30分钟时钟槽中间隔的2个日期?如果在库中找不到,则可以通过实用程序函数实现。我用ChronoUnit做了类似的事情。对于您的情况,逻辑将是不同的,但如何根据设备或时钟时间获得相同的插槽?如果你能用代码解释你的答案,这将是有用的。我们可以从日期和相同的时间段中抽出几分钟,两分钟都应该小于30或大于30。请自己试试,如果需要我可以用代码解释。这看起来不错!一个问题是我的自定义时间不是localdatetime格式,而是日期格式。如何比较localdatetime和date?您的意思是它是java.util.date类型。如果它是日期类型,那么我们可以在LocalDateTime中使用以下行d1.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()转换它;无论如何,我们不必使用java.util.Date。正如在java8中一样,通过LocalDate和LocalDateTimeawesome可以更好地支持日期和时间功能,它将对其进行测试,并让您知道它是如何工作的。谢谢很好用,谢谢!你能帮我解决我面临的另一个类似的逻辑问题吗?我将在另一个问题中很快发布这方面的代码。fyi,
LocalDateTime
在这里使用的类是错误的。正如其Javadoc中所讨论的那样,该类不能代表一个时刻。我想不出调用
LocalDateTime.now()
是正确的做法。而是使用
Instant
OffsetDateTime
zoneDateTime