web-dev-qa-db-ja.com

日付形式に関する簡単な問題

私たちはローカルで閲覧するとうまくロードされるウェブサイトをホストしていますが、外部で閲覧すると

Conversion from string "1/15/2010 8:46:01 AM" to type 'Date' is not valid.

これを修正するためにサーバーで何を変更しますか。サーバー上のサイトを参照すると、IISとは別のユーザーとしてサーバーにログインしていますが、機能します。

これが実際に頭痛を引き起こし始めているどんな考えでも今。

4
Robert

おそらく、変換で使用しているロケールに関係しています。外部的には英国フォーマットが使用されているかもしれませんが、内部的には米国フォーマットが使用されています。文字列を日付に変換するときは、期待する正確な形式を指定してください。

1
Graham Clark

問題のあるコードを見たいのですが、「1/15/2010 8:46:01 AM」はen-USエンコーディングで有効な日付です。米国内の文化を使用していることを確認してください。開発/テストに使用しているマシンに基づいていると思い込まないでください。また、DateTime文字列が入力に基づいている場合は、ユーザーがコントロールパネルを介して 現在のカルチャを上書きする ことができる場合を考慮してください。

これが MSDNの例

string dateString;
CultureInfo culture;
DateTimeStyles styles;
DateTime dateResult;

// Parse a date and time with no styles.
dateString = "03/01/2009 10:00 AM";
culture = CultureInfo.CreateSpecificCulture("en-US");
styles = DateTimeStyles.None;
if (DateTime.TryParse(dateString, culture, styles, out dateResult))
   Console.WriteLine("{0} converted to {1} {2}.", 
                     dateString, dateResult, dateResult.Kind);
else
   Console.WriteLine("Unable to convert {0} to a date and time.", 
                     dateString);
1
David

ソースまたはソースなし。ASP.NETアプリケーションの場合は、web.configのカルチャを正しいカルチャに変更できます。 この質問と私の回答へのコメント を参照してください。

<system.web>
 <globalization culture="en-US" uiCulture="en-US" />
<system.web />

OS設定はユーザーごとであるため、OSコントロールパネルを使用して変更しようとすると問題が発生します。したがって、上記のようにアプリケーションで変更しようとすると、通常は簡単で堅牢になります。

1
Oskar Duveborn

必要なOSの変更は、コントロールパネル>地域と言語のオプション>標準と形式> [言語]ドロップダウンを英語(英国)に、[場所]を英国に設定することです。

理想的には、コードは Culture Invariant Dates を使用して、これらの問題を回避し、 日付の書式設定方法 を使用する必要があります。

1
Tanner

他の回答の1つについてのコメントで、一部のマシンでは機能するが、他のマシンでは機能しないと述べているので、問題がクライアントにある可能性があります。

Webを閲覧するとき、ブラウザはサーバーに一連の承認済み/優先ロケールを提供します。

動作するマシンのこれらの設定を確認し、動作しないマシンの設定と比較する必要があります。一部のマシンが、英国のロケールの要求から米国のロケールの要求に(またはその逆に)切り替えられた可能性があります。

1
Epcylon

サーバーまたはデータベースのロケールはUSに設定されていますが(月/日/年は米国形式の日付であるため)、コードは英国形式の日付(日/月/年)を想定しています。

これらをチェックして、一致していることを確認してください。問題がないはずです。

0
ChrisF

デフォルトのサーバーロケールを変更する方法 を見てください
この setlocale.exe ファイルを試して設定することができます

英語(米国)の場合は00000409。
英語(英国)の場合は00000809。

完全なリストはこちら

0
SwDevMan81