应用场景
	用来验证操作是否大于最小时间间隔,如果大于则允许操作,不大于则不允许操作

1. ValidateOvertimeUtil.java

	package com.qfx.utils;

	import java.text.DateFormat;
	import java.text.ParseException;
	import java.text.SimpleDateFormat;
	import java.util.Date;
	import java.util.Map;
	import java.util.concurrent.ConcurrentHashMap;
	import org.apache.commons.lang3.time.DateFormatUtils;

	/**
	 * <h5>描述:验证操作是否大于最小时间间隔(既验证信息是否超时)</h5>
	 * 
	 * @author zhangpj	2018年9月5日 
	 */
	public class ValidateOvertimeUtil {

		// 验证一定时间段内是否重复提交
		private static Map<String,String> infoMap = new ConcurrentHashMap<String, String>();

		/**
		 * @功能描述:	验证是否超时<br/>
		 *			统一超时时间使用此方法(所有操作的允许超时时间相同)
		 *
		 * @param key 标识
		 * @param intervalTime 最小间隔时间(秒)
		 * @return 验证通过返回true
		 *
		 * @作者:zhangpj		@创建时间:2018年4月4日
		 */
		public static boolean valiOverdtime(String key,int intervalTime){
			boolean flag = false;

			// 清理过期的所有信息
			clearOverdtimeinfo(intervalTime);

			if (null == infoMap.get(key)) {
				String time = getDateTime();
				if (null == time) {
					System.out.println(key +" time = "+ time);
				}
				infoMap.put(key, time);
				flag = true;
			}
			return flag;
		}

		/**
		 * <h5>功能:验证是否超时</h5>
		 * 			非统一超时时间使用此方法
		 * 
		 * @author zhangpj	@date 2018年9月5日
		 * @param key
		 * @param intervalTime
		 * @return 
		 */
		public static boolean valiOverdtimeExt(String key,int intervalTime){
			boolean flag = false;

			// 清理过期的所有信息
			clearOverdtimeinfo(key, intervalTime);

			if (null == infoMap.get(key)) {
				String time = getDateTime();
				if (null == time) {
					System.out.println(key +" time = "+ time);
				}
				infoMap.put(key, time);
				flag = true;
			}
			return flag;
		}

		// ================ private Method ================
		/**
		 * @功能描述:	清理过期的所有信息
		 *
		 * @param intervalTime 默认最小间隔时间(秒)
		 *
		 * @作者:zhangpj		@创建时间:2018年4月4日
		 */
		private static void clearOverdtimeinfo(int intervalTime){
			// 当前时间
			String nowTime = DateUtils.getDateTime();
			// 同步清理,方式多线程操作时发生异常
			synchronized (infoMap) {
				for (String key : infoMap.keySet()) {
					int second = getDistanceSecond(nowTime, infoMap.get(key));

					// 实际间隔时间大于最小间隔时间,则清理
					if (second > intervalTime) {	
						infoMap.remove(key);
					}
				}
			}
		}

		/**
		 * <h5>功能:	清理过期的指定信息</h5>
		 * 
		 * @author zhangpj	@date 2018年9月5日
		 * @param key
		 * @param intervalTime 
		 */
		private static void clearOverdtimeinfo(String key, int intervalTime){
			// 当前时间
			String nowTime = DateUtils.getDateTime();
			// 同步清理,方式多线程操作时发生异常
			synchronized (infoMap) {
				// 获取需要比对的信息
				String mapValue = infoMap.get(key);
				if (null != mapValue) {
					int second = getDistanceSecond(nowTime, infoMap.get(key));
					// 实际间隔时间大于最小间隔时间,则清理
					if (second > intervalTime) {	
						infoMap.remove(key);
					}
				}
			}
		}

		/**
		 * <h5>功能:得到当前日期和时间字符串 格式(yyyy-MM-dd HH:mm:ss)</h5>
		 * 
		 * @author zhangpj	@date 2018年9月11日
		 * @return 
		 */
		private static String getDateTime() {
			return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss");
		}

		/**
		 * <h5>功能:得到日期字符串 默认格式(yyyy-MM-dd) pattern可以为:"yyyy-MM-dd" "HH:mm:ss"</h5>
		 * 
		 * @param date
		 * @param pattern
		 * @return 
		 */
		private static String formatDate(Date date, Object... pattern) {
			String formatDate = null;
			if (pattern != null && pattern.length > 0) {
				formatDate = DateFormatUtils.format(date, pattern[0].toString());
			} else {
				formatDate = DateFormatUtils.format(date, "yyyy-MM-dd");
			}
			return formatDate;
		}

		/**
		 * <h5>功能:获取两个时间相差的秒数</h5>
		 * 
		 * @param str1 格式:yyyy-MM-dd HH:mm:ss
		 * @param str2 格式:yyyy-MM-dd HH:mm:ss
		 * @return 
		 */
		private static int getDistanceSecond(String str1, String str2) {
			DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			Date one;
			Date two;
			long diff;
			long min = 0;
			try {
				one = df.parse(str1);
				two = df.parse(str2);
				long time1 = one.getTime();
				long time2 = two.getTime();
				diff = time1 - time2;
				min = diff / 1000;
			} catch (ParseException e) {
				e.printStackTrace();
			}
			return (int) Math.abs(min);
		}

		public static void main(String[] args) throws InterruptedException {
			System.out.println("有效期3秒," + (valiOverdtime("time",3) == true ? "已过期":"未过期"));
			Thread.sleep(3000); //延时执行时间(毫秒)
			System.out.println("有效期3秒," + (valiOverdtime("time",3) == true ? "已过期":"未过期"));
		}
	}

2. 效果

2.1 未过期

2.2 已过期