我在处理日期方面遇到了问题。我需要一个具有“dd-MM-yyyy”格式的DateTime实例。我不是要求在“dd-MM-yyyy”中有一个我的日期实例的字符串,我知道。
我需要通过Entity框架播种我的日期obj,该框架调用一个存储过程接收一个日期的参数...
我总是可以更改我的存储过程以接收Varchar而不是Date,但我想要类型安全。
以下代码可以帮助您理解问题:
Dim s1 As String = CurrentUICulture.ToString() 'pt-PT
Dim s2 As String = CurrentCulture.ToString()'pt-PT
Dim odate As Date = DateTime.ParseExact(sdate, CurrentUICulture.DateTimeFormat.ShortDatePattern, CurrentUICulture) 'sdate = 19/03/2009
'CurrentUICulture = pt-PT - ShortDatePattern = "dd-MM-yyyy"
'odate is 03/19/2009 !!!
Convert.ToDateTime(sdate, CurrentUICulture)
'its the same!
HELP!
答案 0 :(得分:1)
DateTimes没有格式。它们都不是实例,因为DateTime是值类型。
在我看来,你认为DateTime是'格式错误'(你声称它是03/19/2009)。你是如何检查odate的价值的?通过odate.ToString()打印出来,或者在调试器窗口中检查它的值?尝试使用以下方式打印出来:
Debug.Print odate.ToString(_
Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern, _
Globalization.CultureInfo.CurrentUICulture)
odate只是一个DateTime - 它包含自很久以前某个日期以来的秒数(我现在无法记住哪一个)。它没有格式化信息,因此将在输出格式化。
日期为03/19/2009这一事实意味着您的解析成功了。 03/19/2009即将于2009年3月19日(第19个月的第3个月不是有效日期)。所以不要担心继续前进; - )
答案 1 :(得分:0)
每当处理日期和SQL Server(我假设您也在这里)时,我建议使用ISO-8601格式 - 无论您的语言,文化或其他设置如何,它都应该有效。
ISO-8601将日期格式定义为:YYYY-MM-DD(带或不带短划线; YYYYMMDD也可接受)。
这有用吗?
Dim oDate as Date = DateTime.Parse("2009-03-06")
日期为2009年3月6日。
答案 2 :(得分:0)
问题解决了......因为,首先没有问题!
问题是我正在使用类似这样的函数
GetFormatedDate(ByVal sdate As String) As Date
和...如果sdate什么都没有(或为null),当它到达SQL存储过程时我的日期无效。
ValueTypes
没有任何价值......但是可以这样做:
GetFormatedDate(ByVal sdate As String) As Global.System.Nullable(Of Date)
因此我不再获得无效的param异常。
耶!