1

VB.net では、Murach の Visual Basic 2010 を通じて学習してきました。時間と文字列の処理方法を学習するときに、タイムスパンに関する問題に遭遇しました。

2 つの日付を取り、それらの間の日数を見つける必要があります。

だから私は自分の変数を宣言しました。

Dim currentDay As Date
Dim futureDate As Date
Dim timespan As TimeSpan = currentDay.Subtract(futureDate)
Dim strMsgText As String
Dim daysUntilDue = timespan.Days

次に、 currentDay と futureDate のフォーマットを設定します

currentDay = Convert.ToDateTime(Now)
futureDate = Convert.ToDateTime(txtFutureDate.Text) 'input from user

次に、表示する必要があるデータを設定します

 strMsgText = "Current Date: " & currentDay.ToShortDateString() _
            & "Future Date: " & futureDate.ToShortDateString() _
            & "Days Util Due " & daysUntilDue

次に、データ検証を提供しました

If IsDate(txtFutureDate.Text) Then
   futureDate = CDate(txtFutureDate.Text)
End If

最後にデータを表示します

MessageBox.Show(strMsgText)

構文のエラーやvb ideからのエラーは発生しませんが、日付を計算すると、メッセージボックスにこれが表示されます

元。

Current Date: 3/30/2013

Future Date: 12/26/2013

 Days Until Due: 0

計算で日付を反転しようとしました

元。代わりに、別の結果が得られるかどうかを確認するためだけcurrentDay.Subtract(futureDate)に設定しました。futureDate.Subtract(currentDay)しかし、残念なことに、それでも 0 になります。

これが結果であるために何か間違ったことをしていることは知っていますが、IDE/コンパイラでエラーが発生せず、本でアドバイスが得られないか、これを適切に機能させる方法がわからないため、それが何であるかを見つけることができません.

4

2 に答える 2

0

ユーザーが有効な日付を入力したかどうかを確認する必要があるため、DateTime.TryParse を使用して次のことを確認できます。

Dim currentDay As Date = DateTime.Now
Dim futureDate As Date
Dim strMsgText As String
Dim daysUntilDue As Integer

currentDay = DateTime.Now

Dim ci As New Globalization.CultureInfo("en-US")

' check if a parseable date has been entered before doing the calculation
If DateTime.TryParse(txtFutureDate.Text, ci, Globalization.DateTimeStyles.AllowWhiteSpaces, futureDate) Then
    daysUntilDue = (futureDate - currentDay).Days
    strMsgText = "Current Date: " & currentDay.ToShortDateString() & " Future Date: " & futureDate.ToShortDateString() & " Days Until Due " & daysUntilDue.ToString
Else
    strMsgText = "I could not understand the future date as entered."
End If

MessageBox.Show(strMsgText)
于 2013-03-30T19:53:34.550 に答える