0

現在の時間が定義された時間 + 15 分に等しい時期を判断したいと思います。

ここで定義された時間は次の形式です。

private Date fajr_begins;
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
fajr_begins = new Time(formatter.parse(prayerTimes.get(0)).getTime());

私がこれまでに思いついた、機能していないコードは次のとおりです(以下のコードはくだらないです

DateTime today = new DateTime();
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");

now1 = new Time(formatter.parse(today));

Duration duration = new Duration(sunrise, now1);
System.out.println(" time to duha " + duration);
4

2 に答える 2

2

質問の文脈は少し軽いです。スレッドを使用しますか、アラートを受け取りますか...?

ただし、基本的な例として、次のようなことができます...

// 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) だけを比較できるようにします。

もちろん、ミリ秒を直接比較することもできます...

于 2013-09-05T07:03:22.883 に答える
1

これはあなたがしたいですか?次の文私はそのようになりました。

I would like to determine when the current time equals a defined time + 15mins.

次のように簡単に実行できます

    SimpleDateFormat formatter = new SimpleDateFormat("HH:mm");
    Date preDefineTime=formatter.parse("10:00");
    long additionMin=15*60*1000;
    System.out.println(formatter.format(preDefineTime.getTime()+additionMin));
于 2013-09-05T07:00:02.627 に答える