【发布时间】:2015-09-17 20:35:08
【问题描述】:
我在 vb.net 中遇到了一个奇怪的问题。
通过这种方式,我可以使用 ParseExact、一些日期格式和 CultureInfo 将字符串转换为日期:
Dim f As String = "30-mar-2012"
' Value of f is "30/03/2012"
xdate = DateTime.ParseExact(
f,
"dd-MMM-yyyy",
System.Globalization.CultureInfo.InvariantCulture)
使用 DataReader 时出现问题
While dr.Read
Dim f As String = String.Format("{0:dd-MMM-yyyy}", dr.Item("fec_estado_insc")))
' Value of f is "30-mar-2012"
xdate = DateTime.ParseExact(
f,
"dd-MMM-yyyy",
System.Globalization.CultureInfo.InvariantCulture)
End While
得到错误:“字符串未被识别为有效的日期时间”
如你所见,变量f是一个字符串,它的值来自datareader的一行,但仍然是一个字符串。
这怎么可能?
编辑
在 Chan 的帮助下,我找到了一种以“dd-MMM-yyyy”格式获取日期的黑客方法。我必须创建这个函数:
Public Shared Function Giveme_Date_dd_MMM_yyyy(ByVal XobjValue As Object) As Nullable(Of Date)
If XobjValue Is System.DBNull.Value Then
Return Nothing
ElseIf XobjValue Is Nothing Then
Return Nothing
ElseIf XobjValue.ToString.Trim.Equals("") Then
Return Nothing
End If
Dim f As String = String.Format("{0:dd-MMM-yyy}", XobjValue)
Dim dtResult As Date, xdate As Date
If DateTime.TryParse(f, dtResult) Then
xdate = CDate(dtResult.ToString("f", System.Globalization.CultureInfo.InvariantCulture))
End If
Return xdate
End Function
在数据库中,必须以这种方式更改 SELECT 查询:
OPEN r_cursor FOR
SELECT to_char(fec_estado_insc,'dd/mm/yyyy') AS fec_estado_insc,
blah
blah
blah
但是,原始问题仍然存在。一些 vb.net 错误?
【问题讨论】:
-
也许试试这个?
Dim f As String = CStr(String.Format("{0:dd-MMM-yyy}", dr.Item("fec_estado_insc")).Clone()) -
得到同样的错误:“字符串未被识别为有效的日期时间”。这很奇怪。如果我直接设置变量 f = "30-mar-2012",则没有错误。但是从 DataReader 填充 f 值时出现错误。
-
一旦你设置了
f的值,它就是一个字符串。字符串是一个字符串,无论它是如何设置或来源的;它不会影响您的下一行。你做错了什么......只需尝试逐行遍历代码并检查变量值。