我想做一個日期比較來檢查之前的時期是否大于之后的時期到目前為止,它一直在正常作業,直到日期范圍有點棘手
例如,該值來自下拉串列項之前的時期是 21-10-2022 之后的時期是 04-11-2022
如果之前的時間段大于之后的時間段,它將觸發我設定的錯誤訊息
我有這樣的代碼
If CDate(ddlPeriodeBefore.SelectedValue) <= CDate(ddlPeriodeBefore.SelectedValue) Then
'Does the job if the the before period is smaller than after period
Else
lblInfo.Text = "Period BEFORE Must Be SMALLER Than Period AFTER."
End If
誰能幫我?它一直說“從字串到日期的轉換無效”
我已經嘗試過 datetime.parse、parse exact、cdate、convert.todatetime 但到目前為止沒有任何效果,或者我用錯了方法
請幫忙,提前謝謝
uj5u.com熱心網友回復:
Tim Schmelter 的建議沒有錯,但我確實想提供一個替代方案。創建一個元組集合,將日期(格式化字串和本機值)添加到集合中,然后將控制元件系結到串列。
這是替代方案:
Dim dates As New List(Of Tuple(Of String, DateTime))()
Dim today = DateTime.Today
For daysSubtract = 90 To 0 Step -1
Dim dateToAdd = today.AddDays(-daysSubtract)
dates.Add(New Tuple(Of String, DateTime)(dateToAdd.ToString("dd-MM-yyyy"), dateToAdd))
Next
ddlPeriodeBefore.ValueMember = "Item1"
ddlPeriodeBefore.DisplayMember = "Item2"
ddlPeriodeBefore.DataSource = dates
ddlPeriodeAfter.ValueMember = "Item1"
ddlPeriodeAfter.DisplayMember = "Item2"
ddlPeriodeAfter.DataSource = dates
現在,當您獲取所選值時,您可以使用更簡單的轉換,因為存盤的物件已經是 DateTime:
Dim beforePeriod = DirectCast(ddlPeriodeBefore.SelectedValue, DateTime)
Dim afterPeriod = DirectCast(ddlPeriodeAfter.SelectedValue, DateTime)
If (beforePeriod <= afterPeriod) Then
' ...
Else
lblInfo.Text = "Period BEFORE Must Be SMALLER Than Period AFTER."
End If
這種方法的優點是,如果日期格式發生變化,您不必重構代碼。
uj5u.com熱心網友回復:
如果DateTime.Parse作品取決于您當前的文化,因為您沒有通過任何作品。對我來說這很好用(但對你來說不行):
Dim selectedValue1 = "21-10-2022"
Dim selectedValue2 = "04-11-2022"
Dim beforePeriod = Date.Parse(selectedValue1)
Dim afterPeriod = Date.Parse(selectedValue2)
因此,要么您知道創建此字串時使用的正確文化,然后您可以將其作為第二個引數傳遞給Date.Parse,或者您使用ParseExact:
Dim beforePeriod = Date.ParseExact(selectedValue1, "dd-MM-yyyy", CultureInfo.InvariantCulture)
Dim afterPeriod = Date.ParseExact(selectedValue2, "dd-MM-yyyy", CultureInfo.InvariantCulture)
文化是相關的,因為它們可以有不同的日期分隔符,并且日、月和年標記的順序不同。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/532285.html
