0

テストのために、Web サーバーはMaoriカルチャを持つコンピューター上にあり、短い日付形式は次のようになりますd/MM/yyyy

ユーザーはカルチャのあるコンピューターを使用してHungarianおり、短い日付形式は次のとおりです。yyyy.MM.dd.

ページが読み込まれたときにラベルに DateTime.Now を表示する Web ページを作成しました。表示される日付は2/18/2013 2:22:06 PMです。

だから今私の質問は、表示された日付が別の形式/文化である理由です.Eng-USと思われますか?

次に、データベースの日付 (データベースが異なるカルチャのコンピューター上にあると仮定) を DateTime.Now と比較する必要があります。これを行うには、データベースの日付を Web サーバーのカルチャに一致するように変換する予定です。しかし、私の最初の質問の状況を考えると、DateTime.Now がどのカルチャ/形式になるかをどのように知ることができますか?

編集:使用されるコード:

DateTime nowDateTime = DateTime.Now;
Label7.Text = nowDateTime.ToString().Trim();
4

4 に答える 4

5

質問の最初の部分については、コードは基本的に現在のスレッド カルチャを使用しているだけです。各リクエストの現在のスレッド カルチャがそのリクエストに適したカルチャに設定されていることを確認するか( accept ヘッダーなどに基づいて - を参照HttpRequest.UserLanguages)、または etc へのすべての呼び出しに明示的に渡すことができますToString

なぜ米国英語形式で登場するのかというと、それが Webサービスを実行している文化なのかもしれません。それは、デスクトップが使用する文化と同じではないかもしれません。ユーザー要求が情報を提供しない場合のフォールバックとして使用される可能性がある場合を除いて、それが使用されないように苦労する必要があります。(サービスのデフォルトを使用するのではなく、明示的なフォールバックを選択したくなるでしょう。)

次に、データベースの日付 (データベースが異なるカルチャのコンピューター上にあると仮定) を DateTime.Now と比較する必要があります。

を使用するDateTime.Nowことは、ほぼ間違いなく悪い考えです。ほとんどの場合、DateTime.UtcNowUTC 日付/時刻を使用してデータベースに保存する必要があります。(代わりに現地時間とタイムゾーンを保存する必要がある場合もありますが、それでも使用しませんDateTime.Now。)

これを行うには、データベースの日付を Web サーバーのカルチャに一致するように変換する予定です。しかし、私の最初の質問の状況を考えると、DateTime.Now がどのカルチャ/形式になるかをどのように知ることができますか?

カルチャは、文字列表現との間で変換するときに主に関連します。データベースに値を格納するとき、または値を取得するときは、このような変換を避ける必要があります。代わりに、データベース (またはその他のもの) で適切なフィールド タイプを使用していることを確認してから、データ アクセス レイヤーでとしてDATETIMEフェッチします。何かを使用しようとしていることに気付いた場合は、警鐘を鳴らしてください。使用しているデータ アクセス テクノロジを教えてくれませんでしたが、ほとんどすべてのデータを直接取得できます。(例)DateTimeDateTime.ParseDateTimeDbDataReader.GetDateTime

于 2013-02-18T06:51:05.777 に答える
2

異なるタイム ゾーンの日付を比較する場合は、UTC としてデータベースに保存するのが理にかなっています。次に、任意のタイム ゾーンの他の日付と簡単に比較できます (ここでも UTC に変換されます)。

お役に立てれば。

于 2013-02-18T06:44:19.203 に答える
1

あなたの編集に基づいて、関連するスレッドの文化は本当にマオリではないと思います. これを試してテストしてください:

Label7.Text = CultureInfo.CurrentCulture.ToString();

"mi"またはなら"mi-NZ"マオリです。英語"en""hu"ハンガリー語などです。

現在のカルチャがプログラムによって変更された場合、これは現在のスレッドにのみ影響することに注意してください。他のスレッドではありません。しかし、Windows のコントロール パネルでロケールを設定しようとしましたか?

于 2013-02-18T07:19:27.057 に答える
0

表示された日付が別の形式/文化で表示されているのはなぜですか?

回答:現在の Web サーバーの構成が原因であるか、ユーザーのリクエスト カルチャが選択されている可能性DateTime.Now2/18/2013 2:22:06 PMありますMaori

考えられる解決策: クライアントの文化、つまりハンガリー文化でレンダリングするには

  1. 最も簡単なフレームワーク ハンドル、ユーザーの要求ヘッダーに適応するように構成を変更します
  2. 手動で、これをコーディングする必要がありますPage。のInitializeCultureイベントを処理し、ユーザーの要求ヘッダーに基づいCultureて実行するように変更する必要があります。ヘッダーは次のようになります。HttpRequestAccept-LanguageAccept-Language: hu-HU,en;q=0.8

上記1点のコードサンプル

<system.web>
       <globalization
                  enableclientbasedculture="true"
                  uiculture="auto"
                  culture="auto">
       </globalization>
</system.web>

これについては、グローバル化に関する Scott Hanselman の投稿を参照してください。この概念は、Web フォーム アプリケーションにも適用できます。

データベース値を読み取るには、コード スニペットを次のように使用します。

var culture = CultureInfo.CreateSpecificCulture("mi-NZ");
DateTime.Parse(sqlDbReader["MyDateColumnName"], culture)

参照: SqlDataReader を日付としてフォーマットしMSDN - DateTime.Parse メソッド

于 2013-02-18T07:34:00.730 に答える