我尝试下面的代码来计算加班费。但只有我能处理2个日期时间变量。如果我添加第三个,它给了我一个错误。
Private Sub BtnCalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnCalculate.Click
Dim intime As DateTime
intime = dtIN.Value
Dim outtime As DateTime
outtime = dtOut.Value
Dim norhrs As DateTime = dtnhrs.Value
Dim overtime As TimeSpan
overtime = outtime - intime-norhrs
If txtgrade.Text < 6 Then
txtOT.Text = overtime.ToString
Else : txtOT.Text = "Not Eligible For Overtime"
End If
答案 0 :(得分:2)
首先,您需要使用Option Strict On。这将告诉您问题所在:您无法从时间间隔中减去日期时间。从另一个日期时间中减去一个日期时间会给出一个时间跨度。
请注意,无论您看到什么显示,DateTimePicker都会在其值中包含日期和时间。对于正常时间,您只需要时间组件。
从成绩的文本框中获得的值是一个字符串 - 您需要将其转换为数字才能将其与另一个数字进行比较。有人可能会忘记输入成绩,但你可以很容易地检查它。
如果不使用O / T计算没有意义,那么可以移动部分代码。
Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
Dim grade As Integer
If Integer.TryParse(txtgrade.Text, grade) Then
If grade < 6 Then
Dim intime As DateTime = dtIN.Value
Dim outtime As DateTime = dtOut.Value
Dim norhrs As TimeSpan = dtnhrs.Value.TimeOfDay
Dim overtime As TimeSpan = outtime - intime - norhrs
'TODO: Format the overtime neatly.
txtOT.Text = overtime.ToString
Else
txtOT.Text = "Not eligible For overtime"
End If
Else
MsgBox("Please enter a number for the grade.")
End If
End Sub