2

現在の時刻が設定された間隔(startTimeとendTime)の間にある場合にtrueを返すメソッドをJavaで作成しようとしています。

日付は関係ありません。これを行うための最良の方法は何ですか?

これがうまくいかない私の試みです:

public boolean isNowBetweenDateTime()
{
    final Date now = new Date();
    return now.after(startTime) && now.before(endTime);
}

年、月の日を無視して、時刻が2つのDateオブジェクト内にあるかどうかを確認するための(Javaでの)最良の方法は何ですか?

4

5 に答える 5

3

あなたのコードはよさそうだ。の日付とをハードコードされた値に設定するnowだけstartTimeですendTime

于 2012-05-02T10:28:14.440 に答える
1
于 2016-08-30T18:30:42.573 に答える
0

まず、日付の代わりにカレンダーを使用することをお勧めします。以前、日付を使用して問題が発生しました。そして、日付を比較するためにミリ秒単位の時間を使用します。これが最も安全な方法です。コードは次のようになります。

Date now = new Date();

long startTimeInMillis = startTime.getTime();
long endTimeInMillis = endTime.getTime();
return now.getTime >= startTimeInMillis && now.getTime < endTimeInMillis;
于 2012-05-02T10:41:33.887 に答える
0

日付を無視して時刻のみを考慮したい場合はLocalTime、時間部分のみを保持するように特別に設計されたJoda-Timeの使用を検討してください。

次に例を示します。

java.util.Date startTime = ... ;
java.util.Date endTime = ... ;

public boolean isNowBetweenDateTime()
{
    // get current time
    final LocalTime now = new LocalTime();

    // convert the java.util.Dates to LocalTimes and then compare
    return now.isAfter(LocalTime.fromDateFields(startTime)) &&
           now.isBefore(LocalTime.fromDateFields(endTime));
}
于 2012-05-02T11:04:41.160 に答える
0

このJava関数は、現在の時刻が他の2つの時刻の間にある場合にtrueを返します。年/月/日は無視されます。

import java.text.*;
import java.util.Date;

public static boolean isNowBetweenHours() throws ParseException
{
    String leftBoundaryHours = "01:00:00";   //01:00 hours, military time.(1AM)
    String rightBoundaryHours = "14:00:00";  //14:00 hours, military time.(2PM)

    //returns true if current time is between 
    //leftBoundaryHours and rightBoundaryHours.

    //This formatter converts a bare string to a date.
    DateFormat formatter = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");

    //add the hand specified time to 1970-01-01 to create left/right boundaries.
    Date leftTimeBoundary = formatter.parse("1970-01-01 " + leftBoundaryHours);
    Date rightTimeBoundary = formatter.parse("1970-01-01 " + rightBoundaryHours);

    //extract only the hours, minutes and seconds from the current Date.
    DateFormat extract_time_formatter = new SimpleDateFormat("HH:mm:ss");

    //Get the current time, put that into a string, add the 1970-01-01, 
    Date now = formatter.parse("1970-01-01 " + 
        extract_time_formatter.format(new Date()));

    //So it is easy now, with the year, month and day forced as 1970-01-01
    //all you do is make sure now is after left, and now is before right.
    if (now.after(leftTimeBoundary) && now.before(rightTimeBoundary))
        return true;
    else
        return false;
}

次のような関数を呼び出します。

try {
    System.out.println(isNowBetweenHours());
} catch (ParseException e) {

}

現在の時刻が01:00数時間後、前14:00 hoursの場合、trueを返します。それ以外の場合はfalseを返します。

于 2013-05-09T16:12:18.647 に答える