日期文化格式问题

时间:2009-03-06 11:12:26

标签: .net datetime

我在处理日期方面遇到了问题。我需要一个具有“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!

3 个答案:

答案 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日。

另见:http://www.w3.org/TR/NOTE-datetime

和:http://www.cl.cam.ac.uk/~mgk25/iso-time.html

答案 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异常。

耶!