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

📄 sp_function.java

📁 JAVA编程实现用于处理表达式的简单编译器
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			else if(scanner.curWordValue.equals("day"))
				dd=day;
			else if(scanner.curWordValue.equals("hour"))
				dd=h;
			else if(scanner.curWordValue.equals("min"))
				dd=m;
			else if(scanner.curWordValue.equals("sec"))
				dd=s;
			else if(scanner.curWordValue.equals("all"))
				dates=year+"/"+get2BitDate(mon)+"/"+get2BitDate(day)+" "+get2BitDate(h)+":"+get2BitDate(m)+":"+get2BitDate(s);
			else
				throw new Exception("不识别的日期类型!");
			if(dates!=null)
				src.set(dates,WT_StringConst);
			else
				src.set(String.valueOf(dd),WT_IntegerConst);
				*/
			String synatax=new String(scanner.curWordValue);
			synatax=replaceString(synatax,"yyyy",String.valueOf(y));
			synatax=replaceString(synatax,"mm",m<10 ? "0"+m : ""+m);
			synatax=replaceString(synatax,"dd",d<10? "0"+d : ""+d);

			src.set(synatax,WT_StringConst);
		}
		else if(fname.equalsIgnoreCase("getSomeTime")){
			SP_RunUnit seconds=new SP_RunUnit();
			parser.proMathExpression1(seconds);
			scanner.readOneWord();
			if(scanner.curWordType!=WT_COMMA)
				throw new Exception("缺少, !");
			scanner.readOneWord();
			if(scanner.curWordType!=WT_StringConst)
				throw new Exception("缺少时间类型!");
			Calendar  date = Calendar.getInstance(); 
			date.setTime(new Date((long)(seconds.value1)*1000));
			/*
			int dd=0;
			if(scanner.curWordValue.equals("hour"))
				dd=date.get(date.HOUR_OF_DAY);
			else if(scanner.curWordValue.equals("min"))
				dd=date.get(date.MINUTE);
			else if(scanner.curWordValue.equals("second"))
				dd=date.get(date.SECOND);
			else
				throw new Exception("不识别的时间类型!");
			src.set(String.valueOf(dd),WT_IntegerConst);
			*/
			int h=date.get(Calendar.HOUR_OF_DAY);
			int m=date.get(Calendar.MINUTE);
			int s=date.get(Calendar.SECOND);
			String synatax=scanner.curWordValue;
			synatax=replaceString(synatax,"hh",h<10 ? "0"+h : ""+h);
			synatax=replaceString(synatax,"mm",m<10 ? "0"+m : ""+m);
			synatax=replaceString(synatax,"ss",s<10? "0"+s : ""+s);

			src.set(synatax,WT_StringConst);
		}
		else if(fname.equalsIgnoreCase("getYear")){ 
			parser.proMathExpression1(src);
			src.value1=getDateField((long)src.value1,"year");
			src.type=WT_IntegerConst;
		}
		else if(fname.equalsIgnoreCase("getMonth")){ 
			parser.proMathExpression1(src);
			src.value1=getDateField((long)src.value1,"month");
			src.set(get2BitDate((int)src.value1),WT_StringConst);
			System.out.println("-src.value2----------"+src.value2);
		}
		else if(fname.equalsIgnoreCase("getDay")){ 
			parser.proMathExpression1(src);
			src.value1=getDateField((long)src.value1,"day");
			src.set(get2BitDate((int)src.value1),WT_StringConst);
		}
		else if(fname.equalsIgnoreCase("getHour")){ 
			parser.proMathExpression1(src);
			src.value1=getDateField((long)src.value1,"hour");
			src.type=WT_IntegerConst;
		}
		else if(fname.equalsIgnoreCase("getMinute")){ 
			parser.proMathExpression1(src);
			src.value1=getDateField((long)src.value1,"minute");
			src.type=WT_IntegerConst;
		}
		else if(fname.equalsIgnoreCase("getSecond")){ 
			parser.proMathExpression1(src);
			src.value1=getDateField((long)src.value1,"second");
			src.type=WT_IntegerConst;
		}

		else if(fname.equalsIgnoreCase("getTimerDate")){ //特例!不具通用性
			scanner.readOneWord();
			if(scanner.curWordType!=WT_Variable)
				throw new Exception("应该填入变量!");
			String vname=scanner.curWordValue;
			scanner.readOneWord();
			if(scanner.curWordType!=WT_COMMA)
				throw new Exception("缺少, !");
			SP_RunUnit off=new SP_RunUnit();
			parser.proMathExpression1(off);

			src.set(impl.getVariableValue(vname,String.valueOf((int)off.value1)),WT_StringConst);
		}
		else if(fname.equalsIgnoreCase("getDate")){
			//
			scanner.readOneWord();
			if(scanner.curWordType!=WT_StringConst)
				throw new Exception("缺少日期格式!");
			String synatax=new String(scanner.curWordValue);
			scanner.readOneWord();
			if(scanner.curWordType!=WT_COMMA)
				throw new Exception("缺少, !");
			SP_RunUnit odd=new SP_RunUnit();  //偏移天数
			parser.proMathExpression1(odd);
			//
			Calendar  date = Calendar.getInstance(); 
			date.setTime(new Date(date.getTime().getTime()+(long)(odd.value1)*24*3600*1000));
			int y=date.get(Calendar.YEAR);
			int m=date.get(Calendar.MONTH)+1;
			int d=date.get(Calendar.DAY_OF_MONTH);

			synatax=replaceString(synatax,"yyyy",String.valueOf(y));
			synatax=replaceString(synatax,"mm",m<10 ? "0"+m : ""+m);
			synatax=replaceString(synatax,"dd",d<10? "0"+d : ""+d);

			src.set(synatax,WT_StringConst);
		}
		else if(fname.equalsIgnoreCase("getTime")){
			//
			scanner.readOneWord();
			if(scanner.curWordType!=WT_StringConst)
				throw new Exception("缺少时间格式!");
			//
			Calendar  date = Calendar.getInstance(); 
			int h=date.get(Calendar.HOUR_OF_DAY);
			int m=date.get(Calendar.MINUTE);
			int s=date.get(Calendar.SECOND);

			String synatax=scanner.curWordValue;
			synatax=replaceString(synatax,"hh",h<10 ? "0"+h : ""+h);
			synatax=replaceString(synatax,"mm",m<10 ? "0"+m : ""+m);
			synatax=replaceString(synatax,"ss",s<10? "0"+s : ""+s);

			src.set(synatax,WT_StringConst);
		}
		else if(fname.equalsIgnoreCase("getSDate")){
			//getSTime("日期字符串","格式","指定year/mon/day",odd)
			//日期字符串
			SP_RunUnit dt=new SP_RunUnit();
			parser.proMathExpression1(dt);
			scanner.readOneWord();
			if(scanner.curWordType!=WT_COMMA)
				throw new Exception("缺少, !");
			//格式
			scanner.readOneWord();
			if(scanner.curWordType!=WT_StringConst)
				throw new Exception("缺少日期格式!");
			String style=new String(scanner.curWordValue);
			scanner.readOneWord();
			if(scanner.curWordType!=WT_COMMA)
				throw new Exception("缺少, !");
			//格式
			scanner.readOneWord();
			if(scanner.curWordType!=WT_StringConst)
				throw new Exception("缺少日期格式!");
			String type=new String(scanner.curWordValue);
			scanner.readOneWord();
			if(scanner.curWordType!=WT_COMMA)
				throw new Exception("缺少, !");
			//odd
			SP_RunUnit odd=new SP_RunUnit();
			parser.proMathExpression1(odd);
			//
			Calendar date=_getDateValue(dt.value2,style,type,(int)(odd.value1));
			int y=date.get(Calendar.YEAR);
			int m=date.get(Calendar.MONTH)+1;
			int d=date.get(Calendar.DAY_OF_MONTH);
			String out=new String(style);
			out=replaceString(out,"yyyy",String.valueOf(y));
			out=replaceString(out,"mm",m<10 ? "0"+m : ""+m);
			out=replaceString(out,"dd",d<10? "0"+d : ""+d);

			src.set(out,WT_StringConst);
		}

		
		//
		scanner.readOneWord();
		if(scanner.curWordType!=WT_RPAREN)
			throw new Exception("缺少) !");
	}

	//
	private String get2BitDate(int d)
	{
		return d<10 ? "0"+d : String.valueOf(d);
	}
	//
	private int getDateField(long tsec,String fname)
			throws Exception
	{
	     Calendar  date=Calendar.getInstance(); 
		 date.setTime(new Date(tsec*1000));
		if(fname.equals("year"))
			return date.get(Calendar.YEAR);
		else if(fname.equals("month"))
			return date.get(Calendar.MONTH)+1;
		else if(fname.equals("day"))
			return date.get(Calendar.DAY_OF_MONTH);
		else if(fname.equals("hour"))
			return date.get(Calendar.HOUR_OF_DAY);
		else if(fname.equals("minute"))
			return date.get(Calendar.MINUTE);
		else if(fname.equals("second"))
			return date.get(Calendar.SECOND);
		throw new Exception("错误的时间请求!");
	}
	private String replaceString(String src,String old,String news) //HiTool已经定义,但与之联系麻烦
	{
		if(src==null||old==null||news==null)
			return src;
		//
		int ind=src.indexOf(old);
		if(ind<0)return src;
		return src.substring(0,ind)+news+src.substring(ind+old.length(),src.length()); 
	}
	private Calendar _getDateValue(String tval,String style,String type,int odd)
	{ 
		int yid=style.indexOf("yyyy");
		int mid=style.indexOf("mm");
		int did=style.indexOf("dd");
		int year=Integer.parseInt(tval.substring(yid,yid+4)); 
		int mon=Integer.parseInt(tval.substring(mid,mid+2)); 
		int day=1;
		if(did>0)
		    day=Integer.parseInt(tval.substring(did,did+2)); 
		//
		Calendar  date = Calendar.getInstance(); 
		date.set(year,mon-1+(type.equals("mon")?odd:0),day+(type.equals("day")?odd:0),0,0,0);

		return date;
	}
}

⌨️ 快捷键说明

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