/** * Copyright (c) Istituto Nazionale di Fisica Nucleare, 2006-2014. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.italiangrid.voms.util; import java.util.Calendar; import java.util.Date; /** * Time utilities. * * @author cecco * */ public class TimeUtils { private TimeUtils() { } /** * Checks that a date falls in the interval allowing for a certain clock skew * expressed in minutes. The interval defined by (startDate, endDate) is * modified to be (startDate - skewInMinutes, endDate + skewInMinutes). * * @param timeToCheck * the time to be checked * @param startDate * the start date of the time range * @param endDate * the end date of the time range * @param skewInMinutes * the clock skew in minutes to take into account * * @throws IllegalArgumentException * if passed an illegal time range * @return <code>true</code>, if the time is in the given range, * <code>false</code> otherwise */ public static boolean checkTimeInRangeWithSkew(Date timeToCheck, Date startDate, Date endDate, int skewInMinutes) { if (startDate.after(endDate) || startDate.equals(endDate)) { String msg = String .format( "Illegal time interval: start date must be before end date. [start date: %s, end date: %s]", startDate, endDate); throw new IllegalArgumentException(msg); } Calendar cal = Calendar.getInstance(); cal.setTime(startDate); cal.add(Calendar.MINUTE, -skewInMinutes); Date skewedStartDate = cal.getTime(); cal.clear(); cal.setTime(endDate); cal.add(Calendar.MINUTE, skewInMinutes); Date skewedEndDate = cal.getTime(); return skewedEndDate.after(timeToCheck) && skewedStartDate.before(timeToCheck); } }