⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checktime.java

📁 本代码是一个权限管理系统源代码
💻 JAVA
字号:
package com.seavision.PermissionManage.help;

import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;

/**
 * @author Administrator
 *
 * 
 * 
 */
public class CheckTime {

	//周写在月后面,则算月中的周;
	//周写在年后面,算年的周,同时忽略后面的月设置.


	private int[] year_tab = null;
	private int[] month_tab = null;
	private int[] day_tab = null;
	private int[] hour_tab = null;
	private int[] min_tab = null;
	private int[] sec_tab = null;
	
	

	
	private String year_mark = "年";
	private String month_mark = "月";
	private String day_mark = "日";
	private String hour_mark = "时";
	private String min_mark = "分";
	private String sec_mark = "秒";
	private String blank_mark = " ";

	/**
	 * @param timeStr "*年*月*日*时*分*秒" or "* * * * * * "
	 * "*年*月1,2,3日22,23,0时2,3分4秒" or "* * 1,2,3 22,23,0 2,3 4 "
	 */
	public void setCheckString(String timeStr) {
		//Arrays.sort(tab);
		if(null != timeStr && timeStr.length() > 0){

			String year = null;
			String month = null;
			String day = null;
			String hour = null;
			String min = null;
			String sec = null;
			
			if(timeStr.indexOf(blank_mark) > 0){//用空格分割
				
				String[] a = timeStr.split(blank_mark);
				year = a[0];
				month = a[1];
				day = a[2];
				hour = a[3];
				min = a[4];
				sec = a[5];
				
			}else{//用汉字分割
				
				int year_pos = timeStr.indexOf(year_mark);
				int month_pos = timeStr.indexOf(month_mark);
				int day_pos = timeStr.indexOf(day_mark);
				int hour_pos = timeStr.indexOf(hour_mark);
				int min_pos = timeStr.indexOf(min_mark);
				int sec_pos = timeStr.indexOf(sec_mark);
				
				int[] l = new int[]{-1,year_pos,month_pos,day_pos,hour_pos,min_pos,sec_pos,timeStr.length()};
				
				Arrays.sort(l);
				
				year = getValue(timeStr,deal(l,year_pos));
				month = getValue(timeStr, deal(l,month_pos) );
				day = getValue(timeStr, deal(l,day_pos) );
				hour = getValue(timeStr, deal(l,hour_pos) );
				min = getValue(timeStr, deal(l,min_pos) );
				sec = getValue(timeStr, deal(l,sec_pos) );


				
			}

			year_tab = setArray(year,null);
			month_tab = setArray(month,initInt(1,12));
			day_tab = setArray(day,initInt(1,31));
			hour_tab = setArray(hour,initInt(0,24));
			min_tab = setArray(min,initInt(0,60));
			sec_tab = setArray(sec,initInt(0,60));
			
		}
		
		
	}
	/**
	 * @param year
	 * @return
	 */
	private int[] setArray(String data,int[] def) {
		if(data != null && data.length() > 0){
			if("*".equals(data)){
				return def;
			}
			String[] ds = data.split(",");
			int[] is = new int[ds.length];
			for(int i = 0; i < ds.length; ++i){
				is[i] = Integer.parseInt(ds[i]);
			}
			Arrays.sort(is);
			return is;
			
		}
		return def;
	}
	/**
	 * @param pos
	 * @return
	 */
	private String getValue(String str,int[] pos) {
		if(pos[0] != pos[1] && pos[0] < pos[1]){
			return str.substring(pos[0]+1, pos[1]).trim();
		}
		return null;
	}
	/**
	 * @param checkDate
	 * @return milliseconds
	 */
	public long checkNext(Date checkDate) {
		long passedTime = 0;

		Calendar c = Calendar.getInstance();
		c.setTimeInMillis(checkDate.getTime());
		Calendar c_check = (Calendar) c.clone();
		int year = c.get(Calendar.YEAR);
		int month = c.get(Calendar.MONTH) + 1;
		int day = c.get(Calendar.DATE);
		int hour = c.get(Calendar.HOUR_OF_DAY);
		int min = c.get(Calendar.MINUTE);
		int sec = c.get(Calendar.SECOND);
//		int week = -1;
//		if (isMonthWeek) {
//			week = c.get(Calendar.WEEK_OF_MONTH);
//		} else {
//			week = c.get(Calendar.WEEK_OF_YEAR);
//		}
		int[] c_date = { year,month,day,hour,min,sec};
		int[] old_date = { year,month,day,hour,min,sec};
		int[][] c_wh = {year_tab,month_tab,day_tab,hour_tab,min_tab,sec_tab};
		int type = 0;
		
		for(int i = 0; i < 6; ++i){
			type = get(c_wh,c_date,old_date,i,type);
		}
		
		c_check.set(c_date[0],c_date[1]-1,c_date[2],c_date[3],c_date[4],c_date[5]);

		//System.out.println(new Date(c_check.getTimeInMillis()));
		passedTime = c.getTimeInMillis() - c_check.getTimeInMillis();
		

		return passedTime;
	}
	public int get(int[][] tabs, int[] value, int[] old_date,int idx,int type){
		
		boolean isNeedPrvAdd = false;
		
		int v = value[idx];
		int new_value = 0;
		if(type == 1){//要求获取下一个设定值
			//System.out.println(type + "==");
			v = value[idx]+1;
			new_value = getNextInt(tabs[idx],v);
			isNeedPrvAdd = new_value <= old_date[idx];
			
		}else if(type == 2){//复位,要求获取第一个设定值
			//System.out.println(type + "==");
			v = 0;
			new_value = getNextInt(tabs[idx],v);
			
		}else{
			//System.out.println(type + "==");
			new_value = getNextInt(tabs[idx],v);
			if(new_value < old_date[idx]){
				
				isNeedPrvAdd = true;
			}else if (new_value > old_date[idx]){
				type = 2;
			}
		}
		
		
		
		//System.out.println(new_value + "==" +old_date[idx]+ "==" +idx);
		
		if(isNeedPrvAdd){

			type = 1;

			get(tabs,value,old_date,idx - 1,type);//要求前一数进位
			new_value = getNextInt(tabs[idx],0);//当前值复位
			type = 2;//后面的值都复位
		}
		
		value[idx] = new_value;
		
		
		
		return type;
	}
	/**
	 * @param tab
	 * @param p
	 * @return int[] 0=prv 1=next
	 */
	public int[] deal(int[] tab, int p) {
		int[] r = new int[2];
		r[0] = -1;
		r[1] = -1;
		
		if (tab != null && tab.length > 0) {
			
			if (p <= tab[0]) { // p i1 i2 i3...

					r[0] = tab[tab.length - 1];
					r[1] = tab[0];


			} else if (p >= tab[tab.length - 1]) { // i1 i2 ... in p
				

					r[0] = tab[tab.length - 1];
					r[1] = tab[0];


			} else { // i1 i2 p i3...

				for (int i = 0; i < tab.length; ++i) {

					int a = tab[i];
					if (p <= a) {
						r[0] = tab[i - 1];
						r[1] = a;
						break;
					}

				}
			}

		}else{

			r[0] = p;
			r[1] = p;
			
		}
		return r;

	}
	public long checkPrv(Date checkDate) {
		return -1;
	}
	
	public int[] initInt(int startP,int cycleP){
		int[] array = new int[cycleP];
		for(int i = 0; i < cycleP; ++i){
			array[i] = i + startP;
		}
		return array;
		
	}
	
	public int getNextInt(int[] tab, int p) {
		int[] r = deal(tab, p);

		return r[1] == -1 ? p : r[1];
	}
	public int getPrvInt(int[] tab, int p) {
		int[] r = deal(tab, p);

		return r[0] == -1 ? p : r[0];
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -