📄 checktime.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 + -