.NET DateTimeオブジェクトの文字列形式
-
05-07-2019 - |
質問
これにより、私は本当に興奮しました!
- ADO.NETがSQL Server 2008に接続するデータレイヤーでは、ログインのデフォルト言語は「british」です
- DateTime列を選択してデータビューに入れ、それを返します。
- aspxページのデータバインド
- this:<!> lt;%#String.Format(<!> quot; {0:MMM / yyyy} <!> quot ;, Eval(<!> quot; dbPeriodFrom <!> quot;))% <!> gt;
データベースは2009/10/01を返します(これはyyyy / MM / ddです) ステップ4の結果は2009年1月ですか????
Webサーバーの地域設定は英国です machine.configには<!> lt; globalization ...セクションはありません IISのNETグローバリゼーションは、uiCulture = en culture = en-GBに設定されます サイトのweb.configで設定しました
これは古典的な<!> quot;私の開発マシンで動作します。.<!> quot;しかし、実稼働シナリオにデプロイすると中断します。 何を見逃していたでしょうか?
編集
したがって、ASP.NETアプリケーションがSQl Server 2008に接続するために使用するログインは、ログインのプロパティでデフォルトの言語が「イギリス英語」に設定されているにもかかわらず、米国の日時を取得しているようです。
TSQLで問題が発生します:
SELECT
DATEPART(month, CAST('2009.02.01' AS DATETIME))
,DATEPART(month, CONVERT(DATETIME, '2009.02.01', 102))
デフォルトの言語を「英語」に設定したWindows統合ログイン(管理者)の出力
2 2
デフォルトの言語を「英国英語」に設定したASP.NETで使用されるSQL Serverログインの出力
1 2
解決
データベース自体とそのサーバーのロケール設定を確認します。設定に応じて、日付はロケール設定に従ってフォーマットされます。データベースサーバーはおそらく英語(米国)に設定されていると思われます。dbサーバー自体の地域設定を確認してください。
これが役立つことを願って、 宜しくお願いします、 トム。
他のヒント
コマンド/リーダー/アダプターから日付を取得するコードを見ることに興味があります-データベース列がdatetime
として入力されている場合、ネットワーク上にあるものはではありません実際には<!> quot; 2009/10/01 <!> quot; -これは2進数です(ほとんどの日付が通信中です)。そのため、あいまいさはありません。
どこかで文字列(おそらくParse
)として処理していることを期待しています-これは必要ないはずです。その場合、SELECT
として[n][var]char(x)
としてではなく、<=>として。
Management Studioを使用して、データベースに保存されている値を確認します。また、MS SQLサーバーでは、日付の汎用形式はYYYY-MM-DDTHH:MM:SS.mmm(2009-01-05T10:12:55.001)およびYYYYMMDD(20090105)です。データベースで使用されるロケールに関係なく、これらの形式は常に同じように解析されます。