所以我正在编写一个与闹钟功能相似的应用程序。它要求用户输入时间。但我一直坚持如何解决这个问题。
该方法需要找出用户选择的时间与当前时间之间的分钟差异。假设用户将总是放入当前时间之后的时间(否则使用我的应用程序没有意义),差异就是(userTimeInMins - currTimeInMins),其中两者都是由((小时* 60)+分钟)。
Ex 1)如果当前时间是晚上10点,则用户在凌晨2点进入。上述算法会说两次之间的差异是(22 * 60 + 0) - (2 * 60 + 0),这显然是不正确的,因为这意味着晚上10点到凌晨2点之间有20小时的差异,当差异实际上是4小时。
例2)如果当前时间是下午1点,则用户在2AM时间输入。上面的算法会说两次之间的差异是(13 * 60 + 0) - (2 * 60 + 0),这也是不正确的,因为这意味着存在11小时的差异,而实际差异是13个小时。
我已经意识到,例如1和例如2,可以计算出分钟的差异 (((24 + userHours)* 60)+ userMinutes) - currTimeInMins
我很难在方法中提出决策陈述,以确定是使用第一种方法还是第二种方法来计算分钟差异。
// Listener for the time selection
TimePickerDialog.OnTimeSetListener time = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
String currAM_PM = "";
String userAM_PM = "";
// Get user AM/PM
int hourToShow = 0;
if (hourOfDay > 12){
hourToShow = hourOfDay - 12;
userAM_PM = "PM"
}
else if (hourOfDay == 12){
hourToShow = hourOfDay;
userAM_PM = "PM"
}
else{
hourToShow = hourOfDay;
userAM_PM = "AM"
}
// Update the time field to show the selected time in 12-hr format
EditText timeField = (EditText) findViewById(R.id.editTime);
timeField.setText(hourToShow + ":" + minute + " " + userAM_PM);
// Get current hour
SimpleDateFormat sdf = new SimpleDateFormat("HH");
String cHour = sdf.format(new Date());
int currHour = Integer.parseInt(cHour);
// Get current AM/PM
if (currHour > 12){
currAM_PM = "PM"
}
else if (currHour == 12){
currAM_PM = "PM"
}
else{
currAM_PM = "AM"
}
// Calculate the time to use
// If the selected hour is less than the current hour AND am_pm is "AM"
// THIS IS THE WHERE I NEED HELP
//--------------------------------------------------------------
if(currAM_PM == "PM" && userAM_PM == "AM" .... ??????) {
//take 24, add the hour, use same minute. so that 3 am is 27:00.
timeToUse = ((24 + hourOfDay) * 60) + minute;
}
else
timeToUse = (hourOfDay * 60) + minute;
}
// timeToUse is then passed through an intent extra to the next activity
// where the difference between it and the current time is calculated and used
// for other purposes.
};
答案 0 :(得分:0)
我使用DatePickerDialog和TimePickerDialog加载一个Calendar对象,用户选择年,月等。
然后我创建了一个Date对象,将其初始化为cal.getDate()
然后我将Date.getDate()加载到一个long变量中,从1970年1月1日开始以毫秒为单位
然后我将这个数字除以60000以得到时间分钟。
我对当前日期做了同样的事情,发现两者之间存在差异。 感谢您的帮助。