- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试检查当前时间是否在开始LocalTime
之后和另一个结束LocalTime
之前,即开始时间加 11 小时。如果开始时间是 11:00(结束时间将是 22:00),这会很好地工作。但是,当我尝试比较 16:00 的开始时间和 03:00 的结束时间时,currentTime.isBefore(endTime)
永远不会被记录,但它应该被记录。
LocalTime currentTime = LocalTime.now(); //21:14
LocalTime startTime = new LocalTime( 16, 00, 0, 0);
LocalTime endTime = startTime.plusHours(11); //03:00 Midnight
if(currentTime.isAfter(startTime)){
Log.v("Test", "After startTime");
}
if(currentTime.isBefore(endTime)){
Log.v("Test", "Before endTime");
}
有什么办法解决这个问题吗?
最佳答案
基本上你需要检查你的 startTime
和 endTime
是否颠倒了(即 endTime
是否在 startTime
之前) ).如果是,那一定是一个“夜间”间隔,您应该将其视为相反,然后反转结果。
public boolean isWithinInterval(LocalTime start, LocalTime end, LocalTime time) {
if (start.isAfter(end)) {
return !isWithinInterval(end, start, time);
}
// This assumes you want an inclusive start and an exclusive end point.
return start.compareTo(time) <= 0 &&
time.compareTo(end) < 0;
}
现在这里唯一的奇怪之处在于,如图所示,开始时间通常是包含在内的,而结束时间是不包含的 - 而如果我们反转结果(和参数),我们将得到一个包含在内的结束时间和一个不包含的开始时间。因此,您可能希望显式处理这些情况:
public boolean isWithinInterval(LocalTime start, LocalTime end, LocalTime time) {
if (start.isAfter(end)) {
// Return true if the time is after (or at) start, *or* it's before end
return time.compareTo(start) >= 0 ||
time.compareTo(end) < 0;
} else {
return start.compareTo(time) <= 0 &&
time.compareTo(end) < 0;
}
}
(当然,如何选择用于 compareTo
的目标和参数取决于您。有多种方法可以有效地编写相同的代码。)
简短但完整的示例:
import org.joda.time.LocalTime;
public class Test {
public static void main(String[] args) {
LocalTime morning = new LocalTime(6, 0, 0);
LocalTime evening = new LocalTime(18, 0, 0);
LocalTime noon = new LocalTime(12, 0, 0);
LocalTime midnight = new LocalTime(0, 0, 0);
System.out.println(isWithinInterval(morning, evening, noon)); // true
System.out.println(
isWithinInterval(morning, evening, midnight)); // false
System.out.println(
isWithinInterval(evening, morning, noon)); // false
System.out.println(
isWithinInterval(evening, morning, midnight)); // true
}
public static boolean isWithinInterval(LocalTime start,
LocalTime end,
LocalTime time) {
if (start.isAfter(end)) {
// Return true if the time is after (or at) start,
// *or* it's before end
return time.compareTo(start) >= 0 ||
time.compareTo(end) < 0;
} else {
return start.compareTo(time) <= 0 &&
time.compareTo(end) < 0;
}
}
}
关于java - JodaTime - 检查 LocalTime 是否在现在之后和现在在另一个 LocalTime 之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22310329/
我在寻找一种优雅的方法来从另一个 LocalTime 中减去一个 LocalTime 时遇到问题,但不是减去一定的秒数或分钟数,而是这样: 本地时差 = 现在 - 之前; 显然这是行不通的,所以实际上
我最近使用 LocalDate.atStartOfDay() 回答了一些问题和 LocalDate.atTime(LocalTime.MIN) . 我想知道为什么没有 LocalDate.atEndO
我正在尝试检查当前时间是否在开始LocalTime 之后和另一个结束LocalTime 之前,即开始时间加 11 小时。如果开始时间是 11:00(结束时间将是 22:00),这会很好地工作。但是,当
为什么当我尝试显示 2 个不同参数的日期时,我将其放入 localtime() 函数,控制台显示 2 个相同的日期? 这是我的代码: #include #include #include int ma
我认为我做的一切都是正确的,但为什么我会得到这个: > Sys.time() [1] "2015-11-09 18:51:17 UTC" Warning messages: 1: In as.POSI
我试图编码一个包含LocalTime joda类型时间的对象。如果您尝试返回晚于12am的时间,则会出现问题,因此在下面的示例中,如果类(class)的开始时间是14:00(2pm),则时间将转换为0
我的代码仅支持 Android 中的 API 级别 >= 26: public static String in = "7:00:00"; public static String in_until
我认为我做的一切都是正确的,但为什么我会得到这个: > Sys.time() [1] "2015-11-09 18:51:17 UTC" Warning messages: 1: In as.POSI
为什么当我尝试显示 2 个具有不同参数的日期时,我将其放入 localtime() 函数,控制台显示 2 个相等的日期? 这是我的代码: #include #include #include int
在我的服务器上运行 date 会得到正确的时间。但是在 C(++) 中使用 localtime() 我得到了错误的时间。 运行日期:Fr 30. Nov 12:15:36 CET 2012 使用 lo
所以,我写了下一个函数: void actualizetime(){ puts("actualizetime called"); //debugging purposes. time_t ra
网上有大量代码让我相信下面的代码会给我当前时间。然而,事实并非如此。我得到了我认为是 UNIX 时代的时间; 1970 年 1 月 1 日 00:00;00。 现在真的很烦人,为什么我不能获得计算机系
我有这段代码可以从“29-02-2016”之类的日期返回星期几,但有时它会给我本地时间 (&t) 中的段错误。 int obterDiaSemana(char *str) { struct tm t
我有一段代码工作得很好,但现在不知何故不起作用。 我正在读取一个 csv 文件,但在读取格式为 4:38 的时间字段时出现错误。 我抛出异常的代码是: LocalTime.parse("4:38",
出于学习目的,我正在用 C++ 编写一个简单的日志记录类。我的代码包含一个返回今天日期字符串的函数。但是,每当调用“localtime”时,我都会收到编译器错误。 std::string get_da
我有一个使用 localtime() 的设置来获取一个带有本地时间的 tm。这一切都很好。 但是,如果我在应用程序运行时更改时区,它不会注意到我更改了时区。 有没有办法告诉它“再看一遍”以刷新到系统时
我正在尝试了解如何构建自定义 DateTimeFormatter为我的申请。我基本上需要处理这样写的时间 "HHMMSS.FFFFFF"。 我使用以下方法获得了 99% 的结果: import sta
我有两个 LocalTime 对象: LocalTime time1 = LocalTime.of(8, 0, 0); LocalTime time2 = LocalTime.of(15, 0, 0)
我想将我的字符串转换为 LocalTime 格式 String s = "1時30分:00"; String ss = s.replace("時", ":").replace("分",
我有一个航类行程计划,我需要在其中获取出发时间和到达时间之间的差异。我从数据中获取这些指定时间作为字符串。这是我的问题: import static java.time.temporal.Chrono
我是一名优秀的程序员,十分优秀!