2015-06-03 63 views
0

當我在.NET中使用isDate()方法。它返回無效的結果。爲什麼選擇「AD05AD09」作爲日期。以下是我正在使用的代碼。請給我正確的原因使用isDate返回true vb.net

Dim value As String 
    value = "AD05AD09" 
    If IsDate(value) Then 
     Dim oDate As Date 
     oDate = CDate(value) 
     MsgBox(Format(oDate, "yyyy-MM-dd")) 
    Else 
     MsgBox("a") 
    End If 
+0

一般來說,喜歡['DateTime.TryParse'(HTTPS:/ /msdn.microsoft.com/en-us/library/system.datetime.tryparse%28v=vs.110%29.aspx)。 'IsDate'來自VB運行時庫,它主要用於支持升級pre.NET VB代碼。從而保留了那個時代所有功能的怪癖。 –

+0

即使'cDate'將其轉換爲'05 -09-2015'的日期? –

+0

@akhilkumar是的,它返回一個日期。嘗試複製代碼。 –

回答

1

由於writtern在MSDN:如果expression是日期數據類型或可轉換爲日期

則IsDate返回True;否則,它返回False。

但是你應該去爲常見的方式,這是DateTime.ParseDateTime.ParseExactConvert.ToDateTime多。

見本MSDN例如:

Dim dateValue As Date 
Dim dateString As String = "2/16/2008" 

Try 
    dateValue = Date.Parse(dateString) 
    Console.WriteLine("'{0}' converted to {1}.", dateString, dateValue) 
Catch e As FormatException 
    Console.WriteLine("Unable to convert '{0}'.", dateString) 
End Try 
+0

謝謝,但仍然返回此字符串的日期「AD05AD09」 –

+2

嘗試:DateTime.ParseExact或Convert.ToDateTime。 – ilans

2

它被計數爲由於第一「AD」像在http://en.wikipedia.org/wiki/Anno_Domini所述日期,AD被放置在年之前,但由於05不是4位數,但2數字,功能將其視爲月份。第二個AD在「12AD12AD2008」中的日期中計爲有效分隔符是12/12/2008。

所以,

CDate("AD05AD09") '= 05/09 
CDate("10AD10AD2000") '=10/10/2000 

等。

但BC不工作,因爲BC不能存儲在一個日期,因爲你不能存儲負數年......