我正在尝试检查当前时间是否在开始时间和结束时间之间。但我的方法总是返回false:
from =“5:10:00”; to =“10:10:00”
private boolean isTimeBetweenTwoTime(String from, String to) throws ParseException {
SimpleDateFormat formatter = new SimpleDateFormat("H:mm:ss");
Date date_from = formatter.parse(from);
Date date_to = formatter.parse(to);
Time startTime = new Time(date_from.getTime());
Time endTime = new Time(date_to.getTime());
Calendar c = Calendar.getInstance();
Time now = new Time(c.getTimeInMillis());
if (now.before(endTime) && now.after(startTime)) {
Log.d(LOG_TAG, "Yes time between");
return true;
}
return false;
}
答案 0 :(得分:3)
问题是当你这样做时
Date date_from = formatter.parse(from);
Date date_to = formatter.parse(to);
并且格式化器如此定义:
SimpleDateFormat formatter = new SimpleDateFormat("H:mm:ss");
然后是java api仅与时间相关,但是日期对象持有的不仅仅是时间信息,它们也保持年,月等等,并且那些正在逐渐形成一个时代UNIXTime
所以你创建的初始日期是
Thu Jan 01 05:10:00 CET 1970 and Thu Jan 01 10:10:00 CET 1970
所以询问今天/现在(2016年6月22日)是否在这些日期之间永远不会回归......
另一方面,你的条件看起来是倒置的,作为最后的提示,你不需要SQL-Classes进行计算,只需使用日期对象就可以得到它很好
public static void main(String[] args) throws ParseException {
String from = "5:10:00";
String to = "10:10:00";
String n = "08:10:00";
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
Date date_from = formatter.parse(from);
Date date_to = formatter.parse(to);
Date dateNow = formatter.parse(n);
if (date_from.before(dateNow) && date_to.after(dateNow)) {
System.out.println("Yes time between");
}
}
答案 1 :(得分:0)
您正在使用旧的过时类。它们已被Java 8及更高版本中内置的java.time类取代。功能的Mush已被反向移植到Java 6& 7在ThreeTen-Backport中,并在ThreeTenABP中进一步适应Android。
LocalTime
LocalTime
类实际上真正代表了一个仅限时间的值,与问题中看到的java.sql.Time
和java.util.Date
类不同。
LocalTime start = LocalTime.of( 5 , 10 );
LocalTime stop = LocalTime.of( 10 , 0 );
确定当前时间需要一个时区。对于任何特定时刻,时区在全球范围内按时区变化。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
LocalTime now = LocalTime.now( zoneId );
通过调用equals
,isAfter或isBefore进行比较。我们在这里使用半开放式方法,这在日期工作中很常见,其中开头是包含,而结尾是独占。
Boolean isNowInRange = ( ! now.isBefore( start ) ) && now.isBefore( stop ) ;
答案 2 :(得分:-1)
检查
将您的日期传递给方法
public static int isValidDate(String start,String end){
int valid=0;
DateFormat formatter1 = new SimpleDateFormat("MM/dd/yyyy HH:MM:SS");
Date d1 = null;
Date d2 = null;
Date d3 = null;
Calendar curDate = Calendar.getInstance();
SimpleDateFormat dfcurDate = new SimpleDateFormat("MM/dd/yyyy HH:MM:SS");
String datecurrent = dfcurDate.format(curDate.getTime());
try {
d1 = formatter1.parse(datecurrent);
d2 = new Date(Long.parseLong(end));
d3 = new Date(Long.parseLong(start));
System.out.println(d1.after(d3) && d1.before(d2));
if (d1.after(d3) && d1.before(d2)) {
valid=1;
} } catch (Exception e) {
e.printStackTrace();
}
return valid;
}
如果返回1 - 当前