2009-03-06 23 views
0

私は日付に関する問題を抱えています。 "dd-MM-yyyy"形式のDateTimeインスタンスが必要です。私は、私の知っている "dd-MM-yyyy"の中に私の日付インスタンスの文字列を持つことを求めていません。日付の文化書式の問題

私はいつもではなくVARCHARの日付を受け取るために私のストアドプロシージャを変更することができます

...それ日のparamを受け取るストアドプロシージャを呼び出すエンティティフレームワークを介して、私の日付OBJをシードする必要が

しかし、私は型の安全が欲しい。

次のコードは、問題を理解するのに役立ちます。

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

読みやすくなりますので、私は...私が知っているとは思わない 「それはあなたが(日時が 『正しくフォーマット』と思う私には思える」...、 –

答えて

0

問題!

ところは、SQLストアドプロシージャに達したとき、私は無効な日付を持っていた私はSDATEは何も(またはnull)でない場合は、この

GetFormatedDate(ByVal sdate As String) As Date 

と...のようなものである機能を使用していたです。

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) 

大館はただのDateTimeである - それは(私は今覚えておくことは気にすることはできませんその1)ずっと前にいくつかの日からの秒数が含まれています。フォーマット情報がないため、出力時にもフォーマットされます。

日付が03/19/2009であるということは、解析が成功したことを意味します。 2009年3月19日は2009年3月19日の19日です(19日の3日は有効な日付ではありません)。だから心配しないで移動してください;-)

+0

をあなたのコードをインデントしてください! 私がチェックインデバッグモード ところで:。 「DateTimeのコンストラクター(のInt32、のInt32、のInt32、のInt32、のInt32、のInt32、カレンダー)が指定された年、月、日、時、分にDateTime構造体 – Txugo

+0

の新しいインスタンスを初期化し、指定されたカレンダーの2番目のインスタンス "! それはフォーマット情報を持っています。そして、私はそれを必要とするので、sql.srvからオーバーフロー例外を返さないようにしてください。 質問に答えることも、書き込みにbotterを..don't。 – Txugo

0

日付とSQL Server(私もここにいると思います)を扱うときはいつでも、ISO-8601形式の使用をお勧めします。あなたの言語、文化またはその他の設定。

ISO-8601は、日付形式をYYYY-MM-DD(ダッシュ付きまたはなし、YYYYMMDDでも可)と定義しています。

これは機能しますか? 3月6日の日付の

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

、2009年

も参照してください:http://www.w3.org/TR/NOTE-datetime

と:何の問題は最初の場所でありませんでした、ので...解決http://www.cl.cam.ac.uk/~mgk25/iso-time.html