如何只比较月份和年份? [VB]

时间:2019-08-12 16:59:03

标签: vb.net winforms

这很简单,如果输入日期(仅限月份和年份)高于或低于当前日期(月份和年份),我只想使用月份和年份比较两个日期。

问题是,当我比较两个字符串时

Dim dDate as DateTime

If Not (DateTime.TryParse(txtBox.Text, dDate)) Then
 MessageBox.Show("check date.")
Else
 txtBox.Text = dDate.ToString("MM/yyyy")
end If

IF dDate.ToString("MM/yyyy") < DateTime.Now.ToString("MM/yyyy")
 MessageBox.Show("Below") ' Problem: 03/2024 saying is below than 08/2019
Else
 MessageBox.Show("Above")
End If

有帮助吗?

更新

我更改了案子

If (dDate.Month AndAlso dDate.Year) < (DateTime.Now.Month AndAlso DateTime.Now.Year) Then
 'input: 07/2019 
 'date expired
Else
'the problem is here
'saying 07/2019 is not < than 08/2019
End If

4 个答案:

答案 0 :(得分:1)

我会避免使用字符串。

    Dim dDate As DateTime
    If Not (DateTime.TryParse(txtBox.Text, dDate)) Then
        'bad date
        MessageBox.Show("check date.")
    Else
        Select Case dDate.Year
            Case Is < DateTime.Now.Year
                MessageBox.Show("Below")
            Case Is > DateTime.Now.Year
                MessageBox.Show("Above")

            Case Else 'years are equal,check month
                Select Case dDate.Month
                    Case Is < DateTime.Now.Month
                        MessageBox.Show("Below")
                    Case Is > DateTime.Now.Month
                        MessageBox.Show("Above")
                    Case Else 'equal months
                        MessageBox.Show("SAME") '????
                End Select
        End Select
    End If

答案 1 :(得分:1)

使用日期值可能是最好的方法,但是如果必须进行字符串比较。

Dim dDate as DateTime

If Not (DateTime.TryParse(txtBox.Text, dDate)) Then
  MessageBox.Show("check date.")
Else
  txtBox.Text = dDate.ToString("yyyyMM")
End If

If dDate.ToString("yyyyMM") < DateTime.Now.ToString("yyyyMM") Then
  MessageBox.Show("Below") 
ElseIf dDate.ToString("yyyyMM") > DateTime.Now.ToString("yyyyMM") Then
  MessageBox.Show("Above")
Else
  MessageBox.Show("Same")
End If

答案 2 :(得分:0)

谢谢大家,但是最终的解决方案是

If (dDate.Year < DateTime.Now.Year Or (dDate.Year = DateTime.Now.Year And dDate.Month < DateTime.Now.Month)) Then
  'something                
 Else
  'something
End If

答案 3 :(得分:0)

将年和月转换为Integer值,可以轻松比较小于或大于。例如,如果您在窗体上有两个名为dtpDate1dptDate2的DateTimePicker控件,以及一个按钮btnTest

Private Sub btnTest_Click(sender As Object, e As EventArgs) Handles btnTest.Click

    Dim date1 As Integer = (dtpDate1.Value.Year * 100) + dtpDate1.Value.Month
    Dim date2 As Integer = (dtpDate2.Value.Year * 100) + dtpDate2.Value.Month

    MsgBox("Date1 = " & date1.ToString & vbCrLf & "Date2 = " & date2.ToString)

    If date1 = date2 Then MsgBox("Equal!")
    If date1 < date2 Then MsgBox("date1 is less than date2")
    If date1 > date2 Then MsgBox("date1 is greater than date2")

End Sub

将日期转换为YYYYMM格式的整数。这是一种数据仓库技术,当在WHERE子句中经常使用日期时,可以将日期转换为整数以提高查询性能。