[英]SQLite / Java Compare most recent time stamp with one from 24hr ago for each name
[英]Compare 24hr Strings with Java
我有以下 24 小时的字符串表示,如1423
和1956
我想检查当前时间(带时区)是否在这对之间
我当前的解决方案使用获取一天中的小时和分钟
int h = Instant.now().atZone(ZoneId.systemDefault()).getHour()
int t = Instant.now().atZone(ZoneId.systemDefault()).getMinute()
从数字创建一个 4 位字符串,并进行字符串比较
我根本不喜欢我的解决方案,这样做的优雅方法是什么?
您可以将时间的字符串表示形式转换为LocalTime
,如下所示:
var formatter = DateTimeFormatter.ofPattern("HHmm");
var lowerTime = LocalTime.parse("1423", formatter);
var upperTime = LocalTime.parse("1956", formatter);
然后你可以使用isAfter()
/ isBefore
方法来检查它是否介于两者之间:
var nowTime = LocalTime.now(ZoneId.systemDefault());
boolean inBetween = nowTime.isAfter(lowerTime) && nowTime.isBefore(upperTime);
使用 ZonedDateTime.now() 引用和对 ZonedDateTime#toLocalTime 的后续调用创建一个 LocalTime 对象。 然后使用代表小时 (HH) 和分钟 (mm) 的模式HHmm创建一个 DateTimeFormatter 对象。 然后,您可以使用该模式从开始时间 1423 开始创建 LocalTime,并从该模式创建结束时间 1956。 然后,您可以通过确定当前时间是否在开始时间之后和结束时间之前来创建一个布尔值,表示您的时间是否介于两者之间。
LocalTime time = ZonedDateTime.now().toLocalTime();
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("HHmm");
LocalTime startTime = LocalTime.parse("1423", pattern);
LocalTime endTime = LocalTime.parse("1956", pattern);
boolean between = time.isAfter(startTime) && time.isBefore(endTime);
正如您在问题中所指出的,您的字符串是 24 小时制的,带有前导零,因此您可以将它们作为字符串进行比较。 这是将当前时间转换为所需格式的字符串的更方便的方法:
String now = DateTimeFormatter.ofPattern("HHmm")
.withZone(ZoneId.systemDefault())
.format(Instant.now());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.