您的位置:首页 > 其它

考勤时间计算方法探讨

2011-04-01 21:54 330 查看
private void btnSeek_Click(object sender, EventArgs e)
{
int totalCount = getCalcCount(timeFrom.Time, timeTo.Time);
DateTime tempTime=timeFrom.Time;
double Y = 0;
double R = 0;
double D = 0;
for (int i = 0; i < totalCount; i++)
{
if (chkNight.Checked)
{
if (!isInNightBanCi(tempTime))
{

if (isNightWork(tempTime))
{
Y = Y + 0.5;
}
else
{
R = R + 0.5;
}
}
else
{

D =D+ 0.5;
}
}
else
{
if (!isInDayBanCi(tempTime))
{

if (isNightWork(tempTime))
{
Y = Y + 0.5;
}
else
{
R = R + 0.5;
}
}
else
{

D = D + 0.5;

}
}
tempTime = tempTime.AddMinutes(30);

}
txtMemo.Text = string.Format("Y={0}; R={1}; D={2}", Y, R,D);
}
int getCalcCount(DateTime d1, DateTime d2)
{
double d=(d2 - d1).TotalMinutes;
if (d < 0)
{
d2 = d2.AddDays(1);
}
return (int)( (d2 - d1).TotalMinutes / 30);
}
bool isInDayBanCi(DateTime d)
{
return DHasInD1_D2(d, Convert.ToDateTime("8:00:00"), Convert.ToDateTime("18:00:00"));
}
bool isInNightBanCi(DateTime d)
{
if (DHasInD1_D2(d, Convert.ToDateTime("0:00"), Convert.ToDateTime("9:00")))
return true;
if (DHasInD1_D2(d, Convert.ToDateTime("20:00"), Convert.ToDateTime("23:59:59")))
return true;
return false;
}
bool isNightWork(DateTime d)
{
return !DHasInD1_D2(Convert.ToDateTime(d.Hour+":"+d.Minute), Convert.ToDateTime("9:00"), Convert.ToDateTime("20:00"));
}
bool DHasInD1_D2(DateTime d, DateTime d1, DateTime d2)
{
d=Convert.ToDateTime(d.Hour+":"+d.Minute);
d1=Convert.ToDateTime(d1.Hour+":"+d1.Minute);
d2=Convert.ToDateTime(d2.Hour+":"+d2.Minute);
if (d1 <= d && d <= d2)
{
return true;
}
else
{
return false;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: