2009-03-06 115 views
0

我一直有问题处理日期。我需要有一个具有“dd-MM-yyyy”格式的DateTime实例。我不是要求在“dd-MM-yyyy”中有一个我的日期实例字符串,我知道。日期文化格式问题

我需要通过实体框架种子我的约会OBJ,调用存储过程接收设置了一个param,这一个日期......

我可以随时更改我的存储过程接受一个varchar,而不是日期,但我想要类型安全。

下面的代码可以帮助你理解这个问题:

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

请缩进代码,所以它更容易阅读... – 2009-03-06 11:19:46

回答

0

问题解决了......因为,有摆在首位没有问题!

事情是我使用的功能是这样的

GetFormatedDate(ByVal sdate As String) As Date 

和......如果SDATE什么(或空)我有一个无效的日期,当它到达了SQL存储过程。

ValueTypes没有什么具有价值......但它可以做到这一点:

GetFormatedDate(ByVal sdate As String) As Global.System.Nullable(Of Date) 

与我不再获得无效PARAM例外。

是啊!

1

DateTimes没有格式。它们都不是实例,因为DateTime是一个值类型。

在我看来,你认为DateTime'格式不正确'(你声称它是03/19/2009)。你是如何检查odate的价值的?通过将其打印为odate.ToString(),或者在调试器窗口中检查其值?尝试用它打印出来:

Debug.Print odate.ToString(_ 
    Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern, _ 
    Globalization.CultureInfo.CurrentUICulture) 

大馆只是一个日期时间 - 它包含因为一些最新的秒数很久以前(我不能被人打扰,现在要记住哪一个)。它没有格式化信息,因此将在输出上格式化。

日期为03/19/2009的事实意味着您的解析已成功。 2009年3月19日只是2009年3月19日(第19个月的第3天不是有效日期)。所以不要担心,并继续前进;-)

+0

“在我看来,你觉得日期时间‘的格式不正确’(” 我不觉得......我知道了! 我查调试模式 顺便说一句: “DateTime构造函数(Int32,Int32,Int32,Int32,Int32,Int32,日历)将DateTime结构的新实例 – Txugo 2009-03-06 12:19:46

0

无论何时处理日期和SQL Server(我也假设你在这里),我会建议使用ISO-8601格式 - 它应该工作,不管你的语言,文化或其他设置。

ISO-8601将日期格式定义为:YYYY-MM-DD(带或不带破折号; YYYYMMDD也可接受)。

这是行不通的?

Dim oDate as Date = DateTime.Parse("2009-03-06") 

为3月6日的日期,2009年

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

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