2009-03-06 114 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