質問の文脈は少し軽いです。スレッドを使用しますか、アラートを受け取りますか...?
ただし、基本的な例として、次のようなことができます...
// The time we want the alert...
String time = "16:00";
// The date String of now...
String date = new SimpleDateFormat("dd/MM/yyyy").format(new Date());
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");
try {
// The date + time to give us context
Date timeAt = sdf.parse(date + " " + time);
boolean rollOver = false;
// Determine if the time has already passed, if it has
// we need to roll the date to the next day...
if (timeAt.before(new Date())) {
rollOver = true;
}
// A Calendar with which we can manipulate the date/time
Calendar cal = Calendar.getInstance();
cal.setTime(timeAt);
// Skip 15 minutes in advance
cal.add(Calendar.MINUTE, 15);
// Do we need to roll over the time...
if (rollOver) {
cal.add(Calendar.DATE, 1);
}
// The date the alert should be raised
Date alertTime = cal.getTime();
System.out.println("Raise alert at " + alertTime);
// The timer with which we will wait for the alert...
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("duha");
}
}, alertTime);
} catch (ParseException ex) {
}
について文句を言う前にDate
、すべては相対的です。時間の部分がなければ、Date
いつ警告を発すべきかを知るのは困難です. これDate
は、アラートをいつ発生させるべきかを特定するのに役立ちます...
追加
コンテキストがすべてです。たとえば...次を使用すると...
String time = "16:00";
try {
Date timeAt = new SimpleDateFormat("HH:mm").parse(time);
System.out.println(timeAt);
} catch (ParseException ex) {
ex.printStackTrace();
}
timeAt
値 be Thu Jan 01 16:00:00 EST 1970
、これは本当に役に立ちません。時間は常に今より前になります...
代わりに、次のようなものを使用すると...
String time = "16:00";
String date = new SimpleDateFormat("dd/MM/yyyy").format(new Date());
try {
Date timeAt = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(date + " " + time);
System.out.println(timeAt);
} catch (ParseException ex) {
ex.printStackTrace();
}
timeAt
今後の予定Thu Sep 05 16:00:00 EST 2013
は、私たちにいくつかのコンテキストを提供しますnow
ここでCalendar
、時間を 15 分進めるために使用すると...
Calendar cal = Calendar.getInstance();
cal.setTime(timeAt);
cal.add(Calendar.MINUTE, 15);
Date checkTime = cal.getTime();
System.out.println(checkTime);
にcheckTime
なりThu Sep 05 16:15:00 EST 2013
ます。Calendar
必要に応じて時間と日付を自動的にロールバックするため、使用します...
これで、デフォルトで利用可能な API 機能の使用を開始できるようになりました。ミリ秒が一致する可能性は非常に低いため、次のようなことをしたいと思います...
Calendar watchFor = Calendar.getInstance();
watchFor.setTime(timeAt);
watchFor.set(Calendar.MILLISECOND, 0);
watchFor.set(Calendar.SECOND, 0);
Calendar now = Calendar.getInstance();
now.setTime(new Date());
now.set(Calendar.MILLISECOND, 0);
now.set(Calendar.SECOND, 0);
if (watchFor.equals(now)) {
System.out.println("Go for it...");
}
ミリ秒と秒をゼロにして、日付と時刻 (HH:mm) だけを比較できるようにします。
もちろん、ミリ秒を直接比較することもできます...