Во-первых, я бы предложил использовать Joda Time API. На мой взгляд, это лучший API даты и времени для Java.
Далее вам нужно решить точно , что делать в различных угловых случаях. В частности, предположим, что пользователь вводит «1», и вы близки к переходу на летнее время. Возможно, что 1:00 произошло дважды (если время прошло 1:58, 1:59, 1:00, 1:01 из-за перехода назад из летнего времени) или что это не произошло в все (если время прошло 12:58, 12:59, 2:00 из-за перехода вперед в летнее время). Вам нужно решить, что делать в каждой из этих ситуаций, и помнить, что это также означает знание часового пояса.
Как только вы решите это, это не будет слишком сложно. С Joda Time вы можете использовать метод withHourOfDay
, чтобы переходить из одного времени в другое, задав один компонент времени, и, кроме того, есть простые API для добавления или вычитания дня, если вам нужно. Затем вы можете очень легко определить время между двумя значениями DateTime
- опять же, Joda Time предоставляет все, что вам нужно.
Вот пример, который не пытается ничего сделать с переходами DST, но это хорошая отправная точка:
import org.joda.time.*;
public class Test
{
public static void main(String[] args)
{
// Defaults to current time and time zone
DateTime now = new DateTime();
int hour = Integer.parseInt(args[0]);
DateTime then = now
.withHourOfDay(hour)
.withMinuteOfHour(0)
.withSecondOfMinute(0);
if (then.isAfter(now))
{
then = then.minusDays(1);
}
Period period = new Period(then, now, PeriodType.seconds());
System.out.println("Difference in seconds: " + period.getSeconds());
}
}