[急!][计算与推算上班时间][高手快来][体谅一下分不多]
要求用最简单的方法计算与推算上班时间,做一个类.
例如:
现在是2004/12/3 8:30 正常上班时间为8:30~17:00
我加上10个小时,理论上是2004/12/3 18:30
但由于18:30已超过了下班时间,所以结果为
2004/12/4 10:00 并且要求忽略星期日和一些大假期..
由于本人分不多(已经用光光了),所以体谅一下了.
谢谢.
问题点数:0、回复次数:6Top
1 楼volkia(MonkeyKing)回复于 2004-12-04 00:32:37 得分 0
先做些假设:
beginTime 上班开始时间(8:30)
endTime 下班时间(17:00)
nowTime(.date+.time) 现在的时间 2004/12/3(.date) 18:30(.time)
计算方法:
if (nowTime.time>endTime)
return nowTime;
else
{
int t=(int)((nowTime.Time-startTime)/(endTime-startTime)); //看看过了多少个上班周期
nowTime.date+=t;
nowTime.time=startTime+(nowTime.Time-t*(endTime-startTime)); //多出了的时间
return nowTime;
}Top
2 楼volkia(MonkeyKing)回复于 2004-12-04 00:33:30 得分 0
哦,错了,上面的beginTime和startTime是同一个东东,写错了哈 :)Top
3 楼away5678(超人Advance)回复于 2004-12-04 22:43:25 得分 0
可不可以详细点啊???Top
4 楼volkia(MonkeyKing)回复于 2004-12-05 00:31:59 得分 0
/* 2004-12-5
* @author MKing
*
* WorkOnOffTest
*
*/
public class WorkOnOffTest // 主类
{
public static void main(String[] args)
{
MyWork obj=new MyWork(5,8.50); //当前日期,5号的8:30
System.out.println("Before format:"+obj.toString());
double xx=23.40; //23小时24分之后的时间
System.out.println("After "+(int)xx+":"+(int)((xx-(int)xx)*60));
if (obj.formTime(xx))
{
System.out.println("After format:"+obj.toString());
}
else
{
System.out.println("Error!");
}
}
}
class MyWork //功能类
{
private static double beginTime; //上班时间
private static double endTime; //下班时间
private int today; //号数
private double nowTime; //时间
public MyWork() //默认为上班为8:30,下班为17:00
{
beginTime=8.5;
endTime=17.0;
}
public MyWork(int t,double n) //当前号数与时间
{
this();
today=t;
nowTime=n;
}
public boolean formTime(double diff) //格式化当前时间后的diff个小时
{
if (diff<0||nowTime<beginTime)
{
return false;
}
nowTime+=diff;
double t=endTime-beginTime; //上班周期
int x=(int)((nowTime-beginTime)/t); //从8:30开始以后,包含的上班周期数
today+=x; //即天数
nowTime=beginTime+(nowTime-beginTime-t*x); //余下的时间,等价于 nowTime-=t*x;
return true;
}
public String toString() //格式化输出结果
{
String s="";
s="Date:"+today+"\t Time:"+(int)nowTime;
double y=nowTime-(int)nowTime;
s+=":"+(int)(y*60);
return s;
}
}Top
5 楼redex(cc)回复于 2004-12-05 01:35:14 得分 0
up并mark.Top
6 楼away5678(超人Advance)回复于 2004-12-06 09:34:20 得分 0
谢谢。。
先研究一下。。
^_^Top




