определить, находится ли время в миллисекундах в пределах текущей недели - PullRequest
0 голосов
/ 18 июля 2011

Таким образом, у меня есть время в миллисекундах (полученное ранее из System.currentTimeMillis ()), сохраненное в длинной переменной. Сейчас мне нужен способ определить, находится ли время в пределах текущей текущей недели или нет. Мне нужно получить результат как логическое значение. Каков наилучший способ сделать это?

Ответы [ 4 ]

2 голосов
/ 18 июля 2011

С Йода

new DateTime().weekOfWeekyear().toInterval().contains(millis);

Вы можете проверить, правильно ли он выбирает всю неделю, выполнив что-то вроде

System.out.println(new DateMidnight(2011, 12, 31).weekOfWeekyear().toInterval());

Какие отпечатки 2011-12-26T00:00:00.000/2012-01-02T00:00:00.000. Показывает, что он правильно нашел неделю, которая пересекает границу года. Обратите внимание, что Joda по умолчанию считает воскресенье первым днем ​​недели. Не уверен, что вы можете изменить это на понедельник, если это то, что вам нужно.

Так как объекты Joda являются неизменяемыми (есть только несколько случаев, которых нет), они, как правило, очень недолговечны и в приведенном выше коде практически нет перегрузок производительности, поскольку GC по умолчанию очень эффективен при работе с недолговечными объекты. Но то, что вы получаете, это огромный бонус на удобочитаемость.

1 голос
/ 18 июля 2011
public static boolean withinThisRange(long milliseconds, Date startDate, Date endDate)
{
    Date date = new Date(milliseconds);
    return date.after(startDate) && date.before(endDate);
}
0 голосов
/ 18 июля 2011

Если вам необходимо использовать API JavaSE, я настоятельно рекомендую сделать это следующим образом.Это будет проще для будущих сопровождающих, которые могут не быть людьми java и понимать кошмары поля WEEK_OF_YEAR.

0 голосов
/ 18 июля 2011

Получите время в миллисекундах начала текущей недели и время в миллисекундах начала следующей недели. Затем посмотрите, находится ли время ввода между этими двумя значениями:

public boolean isInCurrentWeek(long time) {
    Calendar cal1 = GregorianCalendar.getInstance();
    Calendar cal2;
    cal1.set(Calendar.DAY_OF_WEEK, 0);
    cal1.set(Calendar.HOUR_OF_DAY, 0);
    cal1.set(Calendar.MINUTE, 0);
    cal1.set(Calendar.SECOND, 0);
    cal1.set(Calendar.MILLISECOND, 0);
    cal2 = (GregorianCalendar) cal1.clone();
    cal2.add(Calendar.DATE, 7);
    return (time >= cal1.getTimeInMillis() && time < cal2.getTimeInMillis());
}
...