Нужны два значения Date () для задачи Java - PullRequest
0 голосов
/ 18 октября 2010

Это действительно простой запрос, но я не совсем уверен, самый простой / эффективный способ генерации этих двух значений.

Мне нужно написать скрипт, который будет проверять, находится ли заданное значение между двумя значениями.Я хорошо знаю, как это делается в SQL.

То, как мне нужны значения, похоже на следующее.

Date testValue = new Date()       //This represents the value we are testing

Date beginningOfDay = ....        //This value would represent the date for 
                                    testValue  at 12:00am

Date endOfDay = ...               //This value would represent the date for 
                                   testValue at 11:59:59pm

Опять же, тип Java Date () можетбыть лучшей практикой, чтобы сделать что-то подобное.В конце мне просто нужно сгенерировать три значения, которые я могу сказать

if testValue is after beginningOfDay && testValue is before endOfDay 
     //do logic

Ответы [ 3 ]

5 голосов
/ 18 октября 2010

Лично я использую объект Календарь для этого.Например:

Date testDate = ??? //Replace with whatever source you are using
Calendar testDateCalendar = Calendar.getInstance();
testDateCalendar.setTime(testDate);

Date today = new Date();
Calendar endOfDay = Calendar.getInstance();  //Initiates to current time
endOfDay.setTime(today);
endOfDay.set(Calendar.HOUR_OF_DAY, 23);
endOfDay.set(Calendar.MINUTE, 59);
endOfDay.set(Calendar.SECOND, 59);

Calendar startOfDay = Calendar.getInstance();
startOfDay.setTime(today);
startOfDay.set(Calendar.HOUR_OF_DAY, 0);
startOfDay.set(Calendar.MINUTE, 0);
startOfDay.set(Calendar.SECOND, 0);

if (startOfDay.before(testDateCalendar) && endOfDay.after(testDateCalendar))
{
//Whatever
} else {
//Failure
}
2 голосов
/ 18 октября 2010

Вы можете использовать объект календаря, чтобы сделать это, и, кстати, способ проверки границ в вашем вопросе неверен (ваша дата может совпадать с датами до / после и все еще рассматриваться в диапазоне). Ниже показано, попадает ли дата в определенный день года. Предполагается, что часовые пояса для dateTime для проверки и дня равны и что никакие временные корректировки не проводились:

Date dateTime=...
Date day=...

// This is the date we're going to do a range check on
Calendar calDateTime=Calendar.getInstance();

calDateTime.setTime(dateTime);

// This is the day from which we will get the month/day/year to which 
// we will compare it
Calendar calDay=Calendar.getInstance();

calDay.setTime(day);

// Calculate the start of day time
Calendar beginningOfDay=Calendar.getInstance();

beginningOfDay.set(calDay.Get(Calendar.YEAR),
                   calDay.Get(Calendar.MONTH),
                   calDay.Get(Calendar.DAY_OF_MONTH),
                   0,  // hours
                   0,  // minutes
                   0); // seconds

// Calculate the end of day time
Calendar endOfDay=Calendar.getInstance();

endOfDay.set(calDay.Get(Calendar.YEAR),
             calDay.Get(Calendar.MONTH),
             calDay.Get(Calendar.DAY_OF_MONTH),
             23,  // hours
             59,  // minutes
             59); // seconds

// Now, to test your date.
// Note: You forgot about the possibility of your test date matching either 
//       the beginning of the day or the end of the day. The accepted answer
//       got this range check wrong, as well.
if ((beginningOfDay.before(calDateTime) && endOfDay.after(calDateTime)) ||
     beginningOfDay.equals(calDateTime) || endOfDay.equals(calDateTime))
{
  // Date is in range...
}

Это может быть дополнительно упрощено до:

Date dateTime=...
Date day=...

// This is the date we're going to do a range check on
Calendar calDateTime=Calendar.getInstance();

calDateTime.setTime(dateTime);

// This is the day from which we will get the month/day/year to which 
// we will compare it
Calendar calDay=Calendar.getInstance();

calDay.setTime(day);

if (calDateTime.get(YEAR)==calDay.get(YEAR) &&
    calDateTime.get(MONTH)==calDay.get(MONTH) &&
    calDateTime.get(DAY_OF_YEAR)==calDay.get(DAY_OF_YEAR))
{
   // Date is in range
}
0 голосов
/ 18 октября 2010

Вот что я использовал в своем собственном коде, чтобы определить, был ли файл изменен в определенный день.Как и другие ответы в этой теме, я использовал Календарь.

// Get modified date of the current file
// and today's date
Calendar today = Calendar.getInstance();
Calendar modDate = Calendar.getInstance();
Date date = new Date(file.lastModified());
modDate.setTime(date);
// Convert dates to integers
int modDay = modDate.get(Calendar.DAY_OF_YEAR);
int todayDay = today.get(Calendar.DAY_OF_YEAR);
if (modDay == todayDay) {
    // Do stuff
}

Это может быть ближе к тому, что вы ищете, поскольку вам нужно только увидеть, происходит ли событие в определенный день.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...