无论日期如何,确定时间是否介于两次之间
我为Android Wear表盘创建了自定义TimePicker
首选项。 用户选择一个时间并以毫秒为单位返回当前时间。 可以在我的GitHub仓库中找到此代码。
我不认为我在那堂课上做的事情有什么不妥 – 但也许我是。 无论如何,我接着去读取这样的值:
final long nightModeStartTimeMillis = prefs.getLong("settings_night_mode_start_time", Long.valueOf(getString(R.string.settings_night_mode_default_start_time))); final long nightModeEndTimeMillis = prefs.getLong("settings_night_mode_end_time", Long.valueOf(getString(R.string.settings_night_mode_default_end_time)));
我的问题是我想用这些时间来确定当前时间是否在它们之间。 但是,我无法弄清楚如何处理日期。 我的defaultValue
TimePreference
开始时间TimePreference
为1483318830000
(Sun Jan 01 20:00:30 EST 2017)。 我一直在尝试从这个答案中找到的代码 ,但是当谈到比较时,我想我永远不会将当前时间介于默认值之间,因为毫秒的日期永远不会改变 – 只有小时和分钟。
这是我目前的尝试 – 这是行不通的
有没有什么方法可以比我做的更简单? 有点困惑所有这一切。
提供两次这个function很长,你得到
如果当前时间介于两次之间,则为TRUE
如果当前时间不在两次之间,则为FALSE
boolean checkIfCurrentTimeInBetweenRegardlessOfDate(long timeOne, long timeTwo) { Calendar calendarOne = Calendar.getInstance(); calendarOne.setTimeInMillis(timeOne); Calendar calendarTwo = Calendar.getInstance(); calendarTwo.setTimeInMillis(timeTwo); Calendar calendarCurrentTime = Calendar.getInstance(); calendarCurrentTime.set(Calendar.HOUR_OF_DAY, 22); Calendar calendarOneToCompare = Calendar.getInstance(); calendarOneToCompare.setTimeInMillis(calendarCurrentTime.getTimeInMillis()); calendarOneToCompare.set(Calendar.HOUR_OF_DAY, calendarOne.get(Calendar.HOUR_OF_DAY)); calendarOneToCompare.set(Calendar.MINUTE, calendarOne.get(Calendar.MINUTE)); calendarOneToCompare.set(Calendar.SECOND, calendarOne.get(Calendar.SECOND)); calendarOneToCompare.set(Calendar.MILLISECOND, calendarOne.get(Calendar.MILLISECOND)); Calendar calendarTwoToCompare = Calendar.getInstance(); calendarTwoToCompare.setTimeInMillis(calendarCurrentTime.getTimeInMillis()); calendarTwoToCompare.set(Calendar.HOUR_OF_DAY, calendarTwo.get(Calendar.HOUR_OF_DAY)); calendarTwoToCompare.set(Calendar.MINUTE, calendarTwo.get(Calendar.MINUTE)); calendarTwoToCompare.set(Calendar.SECOND, calendarTwo.get(Calendar.SECOND)); calendarTwoToCompare.set(Calendar.MILLISECOND, calendarTwo.get(Calendar.MILLISECOND)); int AM_CALENDAR = Calendar.AM; int PM_CALENDAR = Calendar.PM; if (Integer.parseInt(String.valueOf(calendarOne.get(Calendar.AM_PM))) == PM_CALENDAR && Integer.parseInt(String.valueOf(calendarTwo.get(Calendar.AM_PM))) == AM_CALENDAR) { calendarTwoToCompare.add(Calendar.DATE, 1); } return (calendarOneToCompare.compareTo(calendarCurrentTime) < 0 && calendarCurrentTime.compareTo(calendarTwoToCompare) < 0); }
说明
- 此方法永远不会考虑输入日期。
- 这只需要输入日期工厂的小时,分钟,秒和毫秒。
- 如果第一个参数是am,第二个参数是pm,那么日期被认为是相同的。
- 如果第一个参数是下午,第二个参数是第二个参数,那么第二个参数是第二天。 在这种情况下,如果当前时间是晚上10点。 第一个参数是晚上9点,第二个是凌晨3点,函数将返回true。 第二个参数3am被视为第二天的时间,晚上10点是在今天和第二天的凌晨3点之间的晚上9点。
你可以做的是使用这个创建一个2日期对象:
Date first = new Date(); first.setTime(time_in_milliseconds); Date second = new Date(); first.setTime(time_in_milliseconds);
然后你就可以得到当前的时间
Date current = new Date();
然后使用这个条件:
if(current.after(first)&¤t.before(second)){ //Do your work }
希望这可以帮助。
尝试实现下面这种方法。 可能需要一些修改。
private boolean isTimeBetween(long startMillis, long endMillis, long testMillis) { long startHour = (startMillis / (1000 * 60 * 60)) % 24; long startMinute = (startMillis / (1000 * 60)) % 60; long startSecond = (startMillis / 1000) % 60; long endHour = (endMillis / (1000 * 60 * 60)) % 24; long endMinute = (endMillis / (1000 * 60)) % 60; long endSecond = (endMillis / 1000) % 60; long testHour = (testMillis / (1000 * 60 * 60)) % 24; long testMinute = (testMillis / (1000 * 60)) % 60; long testSecond = (testMillis / 1000) % 60; if (startHour < endHour) { if (testHour > startHour && testHour < endHour) { return true; } else if ((testHour == startHour && testMinute > startMinute) || (testHour == endHour && testMinute < endMinute)) { return true; } else if ((testHour == startHour && testMinute == startMinute && testSecond > startSecond) || (testHour == endHour && testMinute == endMinute && testSecond < endSecond)) { return true; } else { return false; } } else if (startHour > endHour) { if ((testHour > startHour && testHour <= 24) && (testHour < endHour && testHour >= 0)) { return true; } else if ((testHour == startHour && testMinute > startMinute || (testHour == endHour && testMinute < endMinute))) { return true; } else if ((testHour == startHour && testMinute == startMinute && testSecond > startSecond || (testHour == endHour && testMinute == endMinute && testSecond < endSecond))) { return true; } else { return false; } } else { if (testMinute > startMinute && testMinute < endMinute) { return true; } else if ((testMinute == startMinute && testSecond > startSecond) || (testMinute == endMinute && testSecond < endSecond)) { return true; } else { return false; } } }
(代码未经测试)