如何减去/添加3个或更多日期时间变量

时间:2015-11-21 08:36:11

标签: vb.net

我尝试下面的代码来计算加班费。但只有我能处理2个日期时间变量。如果我添加第三个,它给了我一个错误。

enter image description here

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

1 个答案:

答案 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