如何计算出勤的进出时间

时间:2018-12-18 05:43:28

标签: .net

我正在开发一个用于考勤控制的Web应用程序。我正在从ZKT机器通过.Net API.以数组的形式获取数据。 从该API中,我没有得到InOut Time的任何标志。因此,我采用了这样一种技术:第一次打孔时间将在In Time  而我最后一次进入的时间将是Out Time在特定日期。因为在特定的一天我可能会得到2个以上的打卡时间。

现在我有了3班制的方案,该方案将在晚上10点开始,第二天早上6点结束。现在,我在考虑在这种情况下如何获得Out Time。出勤日期将是一天In Time的日期。例如,如果员工于2018年5月5日晚上10点到达,则3月5日为出勤日期。

请帮助解决此问题。

机器的数据输入格式

2017-06-16 09:00:00.000 I0495
2017-06-16 10:30:00.000 I0495
2017-06-16 13:00:00.000 I0495
2017-06-16 17:05:00.000 I0495

2017-06-16 09:15:00.000 I0603
2017-06-16 11:30:00.000 I0603
2017-06-16 00:00:00.000 I0603
2017-06-16 01:30:00.000 I0603
2017-06-16 17:10:00.000 I0603

这是处理白天时间偏移的代码

while (axCZKEM1.SSR_GetGeneralLogData(iMachineNumber, out sdwEnrollNumber, out idwVerifyMode,
out idwInOutMode, out idwYear, out idwMonth, out idwDay, out idwHour, out idwMinute, out idwSecond, ref idwWorkcode))//get records from the memory
{
    if (idwYear.ToString() == DtpAtt.Value.Year.ToString() && idwMonth.ToString() == DtpAtt.Value.Month.ToString() && idwDay.ToString() == DtpAtt.Value.Day.ToString())
    {
        iGLCount++;
        lvLogs.Items.Add(iGLCount.ToString());
        lvLogs.Items[iIndex].SubItems.Add(sdwEnrollNumber);//modify by Darcy on Nov.26 2009
        lvLogs.Items[iIndex].SubItems.Add(idwVerifyMode.ToString());
        lvLogs.Items[iIndex].SubItems.Add(idwInOutMode.ToString());
        lvLogs.Items[iIndex].SubItems.Add(idwYear.ToString() + "-" + idwMonth.ToString() + "-" + idwDay.ToString() + " " + idwHour.ToString() + ":" + idwMinute.ToString() + ":" + idwSecond.ToString());
        lvLogs.Items[iIndex].SubItems.Add(idwWorkcode.ToString());

        var id = Convert.ToInt32(mdl.GetRecord("id", "atndnce", "attendance_id='" + sdwEnrollNumber + "' and attendance_date='" + DtpAtt.Value.ToString("yyyy-MM-dd") + "'"));
        if (id > 0)
        {
            var time = mdl.GetRecord("in_time", "atndnce", "attendance_id='" + sdwEnrollNumber + "' and attendance_date='" + idwYear.ToString() + "-" + idwMonth.ToString() + "-" + idwDay.ToString() + "'");
            mdl.UpdateRecord("atndnce", " duty_hours = '" + TxtHours.Text.ToString() + "', out_time='" + idwHour.ToString() + ":" + idwMinute.ToString() + ":" + idwSecond.ToString() + "'", "id = " + id.ToString());
        }
        else
            mdl.InsertRecord("atndnce", "attendance_id,attendance_date,in_time,posted,duty_hours,machine_id", "'" + sdwEnrollNumber + "','" + idwYear.ToString() + "-" + idwMonth.ToString() + "-" + idwDay.ToString() + "','" + idwHour.ToString() + ":" + idwMinute.ToString() + ":" + idwSecond.ToString() + "',0 ,'" + TxtHours.Text.ToString() + "','" + CmbStation.SelectedValue + "'");
        iIndex++;
    }
}

0 个答案:

没有答案