我有一个日期: actDate ,并且它的时间被提取为字符串 timeFromAct
然后我有一个来自数据库的参考时间: timeValue ,该时间已转换为字符串,作为 timeFromDB
DateFormat formatTime;
formatTime = new SimpleDateFormat("HH:mm:ss");
Date actDate = actinfo.getActDate();
String timeFromAct = formatDay.format(actDate);
String date= ListOfConstants.SOME_DATE_REF;
ResultTable[] timeValue = RTManager.getSomethingDecodeList(date);
String timeFromDB = Arrays.toString(timeValue);
我知道将两者转换为字符串不会让我比较两次,但是
我想知道如何在if语句中比较这些时间值(类似于下面的比较)?
if (timeFromAct is greater than or equal to timeFromDB){
*some codes*
}
答案 0 :(得分:1)
这样写;
if (actDate.after(timeFromDb) || actDate.compareTo(timeFromDB)==0 ){
*some codes*
}
详细信息
actDate.after(timeFromDb)
所提供的功能远非案例。actDate.compareTo(timeFromDB)==0
提供了actDate
和
timeFormDb
。或者如果两者的格式相同,则使用String比较;
if(timeFromAct.compareTo(timeFromDB) > 0 || timeFromAct .equals(timeFromDB)){..}
或更简单
if(!(timeFromAct.compareTo(timeFromDB) < 0)){..}
String.compareTo用作
"a".compareTo("b"); // returns a negative number, here -1
"a".compareTo("a"); // returns 0
"b".compareTo("a"); // returns a positive number, here 1
答案 1 :(得分:1)
Date actDate = actinfo.getActDate();
ResultTable[] timeValue = RTManager.getSomethingDecodeList(date);
LocalTime actualTime = actDate.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalTime();
if (timeValue.length == 1) {
LocalTime timeFromDB = LocalTime.parse(timeValue[0].toString());
if (! actualTime.isBefore(timeFromDB)) {
System.out.println("timeFromAct is greater than or equal to timeFromDB");
} else {
System.out.println("timeFromAct is less than timeFromDB");
}
} else {
System.out.println("Unexpected number of ResultTable entries: " + timeValue.length);
}
LocalTime
是一天中没有日期和时区的时间。我相信这正是您所需要的。
我假设getActDate
总是返回旧的Date
对象。最好将其修改为从现代Java日期和时间API java.time返回合适的类型。
在上述代码中从Date
到LocalTime
的转换中,您需要正确设置时区,否则将得到错误的结果。我暂时假定JVM时区设置为ZoneId.systemDefault()
,因为您问题中的SimpleDateFormat
使用了此设置;但这是脆弱的,因为可以从程序的另一部分或在同一JVM中运行的另一个程序更改设置。如果您可以指定正确的时区,例如ZoneId.of("Asia/Manila")
,则更好。
请检查您的假设。 RTManager.getSomethingDecodeList
当然只会返回1个值,例如:[23:32:45]。这项检查花费很少,如果某天项目上的新程序员修改它以返回不同长度的数组,则跟踪该错误将很昂贵。在这种情况下,通过发出有用的错误消息来提供帮助。
您使用的日期时间类-DateFormat
,SimpleDateFormat
和Date
-早已过时且设计欠佳。前两个特别以麻烦而闻名。我认为没有任何理由可以避免使用这些方法。
不幸的是,我无法从执行代码的地方导入java.time。
如果您至少使用Java 6,则可以使用java.time。
org.threeten.bp
导入日期和时间类。java.time
。java.time
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。