Извините, я думаю, что потратил слишком много времени на это и запутался.
У меня есть следующий код:
System.out.println("Time Now: " + new Date());
Calendar beginningOfDay = new GregorianCalendar();
beginningOfDay.set(Calendar.HOUR_OF_DAY, 0);
beginningOfDay.set(Calendar.MINUTE, 0);
beginningOfDay.set(Calendar.SECOND, 0);
beginningOfDay.set(Calendar.MILLISECOND, 0);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
Date specifiedTime = null;
try{
specifiedTime = sdf.parse("20:55"); // this time is extracted from interface
} catch(ParseException pe){} // complete this later
System.out.println("specified time is: " + specifiedTime);
Calendar runResults = new GregorianCalendar(TimeZone.getDefault());
if (beginningOfDay.getTimeInMillis() + specifiedTime.getTime() > System.currentTimeMillis())
{ System.out.println("specified time has not occured yet");
runResults.setTimeInMillis(beginningOfDay.getTimeInMillis() + specifiedTime.getTime());
System.out.println("Time to run tests is: " + runResults.getTime());
}
else
{ System.out.println("need to run tests tomorrow");
beginningOfDay.add(Calendar.DATE, 1); // add a day
runResults.setTimeInMillis(beginningOfDay.getTimeInMillis() + specifiedTime.getTime());
System.out.println("Time to run tests is: " + runResults.getTime());
}
Что дает следующий вывод:
Time Now: Thu Aug 25 20:17:52 BST 2011
specified time is: Thu Jan 01 20:55:00 GMT 1970
need to run tests tomorrow
Time to run tests is: Fri Aug 26 19:55:00 BST 2011
Так почему указанный анализ времени возвращается с 19:55 BST?
Я пытался установить часовой пояс sdf (simpledateformatter) таким же, как календарь, но, похоже, он не работает.
В идеале я хочу получить любое время (например, «20,55») для преобразования во время в местном часовом поясе, и если это время еще не произошло, тогда таймер отключается в это время. иначе придется подождать до следующего дня. Это код, с помощью которого я пытаюсь вычислить время, когда таймер запускает TimerTask. Если кто-нибудь может предложить лучшее решение, я был бы очень благодарен. Timer должен инициировать TimerTask, когда местное время соответствует указанному в TimeTime.
Еще раз спасибо за любую помощь.
EDIT:
использовал это, чтобы заставить его работать. Не очень аккуратно, хотя
Calendar timeNow = new GregorianCalendar();
String timeNowString = timeNow.getTime().toString();
String timeNowFirstBit = timeNowString.substring(0, 10); // e.g. "Sat Aug 27"
String timeNowLastBit = timeNowString.substring(24); // e.g. "2011"
String userSpecifiedTime = "14:32";
SimpleDateFormat specTimeFormat = new SimpleDateFormat("EEE MMM dd HH:mm yyyy");
String allNewSpecifiedTime = timeNowFirstBit + " " + userSpecifiedTime + " " + timeNowLastBit;
Date specifiedTime = null;
try{
specifiedTime = specTimeFormat.parse(allNewSpecifiedTime);
} catch (ParseException pe){}
Calendar runResults = new GregorianCalendar();
runResults.setTimeInMillis(specifiedTime.getTime());
if (specifiedTime.getTime() > System.currentTimeMillis())
{ System.out.println("specified time has not occured yet");
}
else
{ System.out.println("need to run tests tomorrow");
runResults.add(Calendar.DATE, 1); // add a day
}
System.out.println("Time to run tests is: " + runResults.getTime());