2012-06-10 41 views
2

看起來好像我一直有日期問題。我使用下面的代碼:在VB.net中無法正確轉換的日期

 Dim LocalDateCultureProvider As New CultureInfo(CultureInfo.CurrentCulture.ToString) 
     Dim CurrentDate As DateTime = Convert.ToDateTime(System.DateTime.Now.ToString("dd/MM/yyyy"), System.Globalization.CultureInfo.InvariantCulture) 

     ExpiryDate = DateTime.ParseExact(strDate, "dd/MM/yyyy", LocalDateCultureProvider) 
     If DateTime.Compare(ExpiryDate, CurrentDate) < 0 Then 

MsgBox("This file has expired.") 
      Exit Sub 
     End If 

我在這裏讀strDate爲一個字符串,舉一個例子,這個值是「29/09/2012」不過,在將其轉換爲#09 ExpiryDate線/ 2012 /##,以便與Current Date中存儲的當前日期(正確地在我的意見中)作爲#10/6/2012#進行比較,我得到If條件爲真(錯誤地)。

順便說一句,我也試過 昏暗LocalDateCultureProvider作爲新的CultureInfo(System.Globalization.CultureInfo.InvariantCulture.ToString)

只是爲了看看這是造成問題的原因。我正在嘗試構建能夠在所有文化中運行的東西。無論本地設置是什麼,我都想通過比較當前系統日期和我以字符串形式接收的到期日期來測試到期日期。請告訴我如何去做這個,這樣我就可以得到一致的結果。

TIA, Chiwda

回答

1

不,你解析的currentdate不正確。 CultureInfo.InvariantCulture預計在一天前的一個月,但您首先將其格式化爲一天。您正在編寫不必要的代碼,只需修復:

If DateTime.Compare(ExpiryDate, DateTime.Now) < 0 Then 
+0

但是在美國卻不是這樣嗎?例如在其他國家/地區,系統日期格式爲dd/MM/yyyy格式。 – Chiwda

+1

你正在使用* InvariantCulture *,它到處都是一樣的。將DateTime轉換爲字符串然後再轉回DateTime是沒有意義的。得出錯誤的結果是。 –

+0

VB.Net不會讓你做'If(ExpiryDate Brian