2013-02-21 4 views
0

Я хотел знать, как я мог выполнять функцию между двумя моментами, скажем, с 6 утра до 3 вечера? Для целей тестирования у меня есть код ниже, но я уверен, что есть намного лучший способ сделать то, что я хочу.Выполнить функцию между двумя временами jodatime

if(dt.getHourOfDay() > 12 && dt.getHourOfDay()+dt.getMinuteOfHour() < 13){ // execute function }

код, просто проверяет, является ли час 12 и если время время между 12 и 12:01.

Не могли бы вы рассказать мне лучше реализовать то, что я хочу?

Спасибо.

ответ

1

Во-первых, в вашем примере вы хотели бы это для простоты:

if (dt.getHourOfDay() == 12 && dt.getMinuteOfHour() == 0) { 

} 

Или возможно:

if (dt.getHourOfDay() == 12 && dt.getMinuteOfHour() >= 0 && dt.getMinuteOfHour() < 1) { 

} 

Если вы не хотите, чтобы непосредственно сравнивать, вы можете создайте два момента, соответствующие времени, которое вы хотели, и используйте методы isBefore и isAfter AbstractInstant, или isBeforeNow, isAfterNow. Что-то вроде:

Instant todayMidnight = new DateMidnight().toInstant(); 
Instant earliest = todayMidnight.plus(Hours.hours(6).toStandardDuration()); 
Instant latest = todayMidnight.plus(Hours.hours(15).toStandardDuration()); 
if (latest.isAfterNow() && earliest.isBeforeNow()) { 
    // Execute 
} 

Немного запутано, так как вы должны построить объект todayMidnight неоднократно, но очень ясно whaty ou're делать.

Но что вы на самом деле пытаетесь сделать? Вы пытаетесь запустить что-то в стиле «cron»? Или ограничить доступ к некоторому коду определенному времени суток? В зависимости от этого может быть лучший способ.

+0

В принципе, я хочу бежать программу между 6am и 3pm. Предпосылка программы - найти погоду между этими временами. –

+0

Я боюсь, что второй код не работает. Я получаю следующее сообщение: «Метод plus (long) в типе Instant не применим для аргументов (Hours)» –

+0

ETA: toStandardDuration(), который, я думаю, должен исправить , (Я не компилирую его, так или иначе). – James

-1

Это мое решение. Это не короче, но понятнее.

int secBetween = Seconds.secondsBetween(new LocalTime(12, 0), dt.toLocalTime()).getSeconds(); 
if (secBetween > 0 && secBetween < 60) { ... } 
0

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

Смежные вопросы