- 论坛徽章:
- 0
|
这个时间检查器就是对事先设定的一个时间,诸如 每月的第几天,每周的第几天,
每天的第几时,每时的第几分
和现在的时间进行对比,如果相同,就返回true ,从而程序可以激发其他事件
现在的问题是,我的四个标识性GregorianCalendar ,在第一次校验后,设置后会跟随系统当前时间一起更新,我都没有复制的呀?好奇怪,难道我的程序中逻辑不对?还是GregorianCalendar 类的特殊动作行为?
请大家不吝赐教,多谢,多谢
源码如下
/*************************************
* Title: TimeCher.java
* Description: 时间检查器
* Date: April ,2003
* Copyright: Copyright (c) Emate
* @version : 1.0
*************************************/
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.text.SimpleDateFormat;
public class TimeChecker {
// 时间检查标识
GregorianCalendar cal_mark_day=new GregorianCalendar();
GregorianCalendar cal_mark_week=new GregorianCalendar();
GregorianCalendar cal_mark_hour=new GregorianCalendar();
GregorianCalendar cal_mark_min=new GregorianCalendar();
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmss" ; //日期格式
public TimeChecker(){}
public void setChecker(){
/*
cal_mark_day=new GregorianCalendar();
cal_mark_week=new GregorianCalendar();
cal_mark_hour=new GregorianCalendar();
cal_mark_min=new GregorianCalendar();
*/
cal_mark_day.set(1970,1,1);
cal_mark_week.set(1970,1,1);
cal_mark_hour.set(1970,1,1,0,0);
cal_mark_min.set(1970,1,1,0,0);
return;
}
public void resetDay(){
cal_mark_day.set(1970,1,1);
}
public void resetWeek(){
cal_mark_week.set(1970,1,1);
}
public void resetHour(){
cal_mark_hour.set(1970,1,1,0,0);
}
public void resetMin(){
cal_mark_min.set(1970,1,1,0,0);
}
//判断是否为同一天
public boolean isSameDay(GregorianCalendar cal_a,GregorianCalendar cal_b){
String str_a=sdf.format(cal_a.getTime());
String str_b=sdf.format(cal_b.getTime());
return ((str_a.substring(0, ).equals(str_b.substring(0, ));
}
//判断是否为同一天,同一点
public boolean isSameClock(GregorianCalendar cal_a,GregorianCalendar cal_b){
String str_a=sdf.format(cal_a.getTime());
String str_b=sdf.format(cal_b.getTime());
return ((str_a.substring(0,10)).equals(str_b.substring(0,10)));
}
//判断是否为同一天,同一点,同一分钟
public boolean isSameMin(GregorianCalendar cal_a,GregorianCalendar cal_b){
String str_a=sdf.format(cal_a.getTime());
String str_b=sdf.format(cal_b.getTime());
return ((str_a.substring(0,12)).equals(str_b.substring(0,12)));
}
//判断现在时间是否符合备份条件
//前四个int 变量是 实现设定需要定时处理的时间 月份序号,周数序号,点钟序号,分钟序号 ,后面是当前比较的日期型
public boolean ring(int sn_in_month,int sn_in_week,int sn_in_day,int sn_in_hour,GregorianCalendar cal){
if ((sn_in_month==-1)&&(sn_in_week==-1)&&(sn_in_day==-1)&&(sn_in_hour==-1)) return false;
boolean bl=false;
boolean bl_day=false;
boolean bl_week=false;
boolean bl_hour=false;
boolean bl_min=false;
boolean change_day=false;
boolean change_week=false;
boolean change_hour=false;
boolean change_min=false;
//Date now_date=new Date();
System.out.println("================================================================================ " ;
System.out.println("Now : "+sdf.format(cal.getTime()));
int now_in_month = cal.get(java.util.Calendar.DAY_OF_MONTH); //现在是当月第几天,每月
int now_in_week = cal.get(java.util.Calendar.DAY_OF_WEEK); //现在是当周第几天,从星期一算起
int now_in_day = cal.get(java.util.Calendar.HOUR_OF_DAY ); //现在是几点
int now_in_hour= cal.get(Calendar.MINUTE); //现在是几分
//System.out.println("Now : "+sdf.format(cal.getTime()));
//因为星期日为 1 ,转换数据库数据为本系统适用数据
if (now_in_week==1){
now_in_week=7;
} else {
now_in_week--;
}
//判断第几天,如果数据库字段为-1,表示不限定,则通过;
//如果数据库限定了,则和当前时间的天的序号比较,如果相等,再与相应标识日期的天数序号比较,如果是相同一天,则略过,
if (sn_in_month==-1) bl_day=true;
else {
if (sn_in_month==now_in_month)
if (!isSameDay(cal,cal_mark_day)) {
bl_day=true;
change_day=true;
}
}
if (sn_in_week==-1) bl_week=true;
else {
if (sn_in_week==now_in_week)
if (!isSameDay(cal,cal_mark_week)) {
bl_week=true;
change_week=true;
}
}
if (sn_in_day==-1) bl_hour=true;
else {
if (sn_in_day==now_in_day)
if (!isSameClock(cal,cal_mark_hour)) {
bl_hour=true;
change_hour=true;
}
}
if (sn_in_hour==-1) bl_min=true;
else {
if (sn_in_hour==now_in_hour)
if (!isSameMin(cal,cal_mark_min)) {
bl_min=true;
change_min=true;
}
}
bl = bl_day&&bl_week&&bl_hour&&bl_min;
System.out.println(">;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;(sn_in_hour==now_in_hour) "+(sn_in_hour==now_in_hour));
System.out.println(">;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;(isSameMin(cal,cal_mark_min))"+(isSameMin(cal,cal_mark_min)));
System.out.println(">;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;>;(bl&&change_min)"+(bl&&change_min));
System.out.println("cal_mark_min: "+sdf.format(cal_mark_min.getTime()));
if (bl&&change_day) cal_mark_day=cal;
if (bl&&change_week) cal_mark_week=cal;
if (bl&&change_hour) cal_mark_hour=cal;
if (bl&&change_min) cal_mark_min=cal;
return bl;
}
//显示当前标识时间的数值
public void printMark(){
System.out.println(sdf.format(cal_mark_day.getTime()));
System.out.println(sdf.format(cal_mark_week.getTime()));
System.out.println(sdf.format(cal_mark_hour.getTime()));
System.out.println(sdf.format(cal_mark_min.getTime()));
}
} |
|