2

DateTime次のように、DotNetNuke モジュールで2 つの値を比較する必要があります。

// This value actually comes from the database.
DateTime time1 = Convert.ToDateTime("6/2/2013 5:21:05 PM");

// Say it is now "5/31/2013 2:20:33 AM"
DateTime now = DateTime.Now;

int num = DateTime.Compare(time1, now);

の値がの値よりも大きいnum == 1ためです。しかし、DotNetNuke の設定で言語をドイツ語 ( ) に変更すると、 の値が -になります。結果はとなり、意味はよりも早い。は実際には より遅いため、これは正しくありません。DateTimetime1DateTimenowde-DEnow31/5/2013 2:20:33 AMnum-1time1nowtime1now

値はサーバーから取得されるため、常にフォーマットされていますtime1mm/dd/yyyy

では、DotNetNuke で別の言語が設定されている場合、どうすれば適切な比較を行うことができるでしょうか? ウェブを検索したところ、次のコードで時刻を修正できることがわかりました。

provider = new CultureInfo("en-US");
DateTime.ParseExact("5/31/2013", "d", provider);

あれは正しいですか?この懸念を処理するためのより良い方法はありますか?

編集済み

time 1 は、db に保存する前に私の Web サイト サーバーから取得され、クライアントの Web サイトの datetime 値と比較されることを忘れていました。すべてのコードは、そのクライアント サイトにある私のアプリです。リモートサイトのデータを取得するため、その dnn サイト言語が de-DE に設定されている場合、'now' 変数の値は日が最初で、サイトの日付とは逆になります。日付は米国形式の月が最初です。結果として、比較が行われると、サーバーの日付が表示されます。クライアントサイトの日付よりも早いという結果になりました! そして、すべてが壊れます.参考までに、私のサーバーの日付は、ライセンス目的で6月2日である1週間後の日付として来ました。

再度編集:

こんにちはevery1。次のコードで解決策を見つけました。この日付は、上記のように別のサーバーからのものです-「2013年6月15日」(変更はbef4 6/2/2013でした)。文字列形式です。文字列?それは長い歴史です.今すぐ文字列にしましょう.文字列に変換する前は、米国の日付形式でした(1か月前).今、私のアプリがある現在のWebサイトでは、これらのコードは機能しているようです.間違っていないことを願っています.確認

CultureInfo provider = CultureInfo.InvariantCulture;
provider = new CultureInfo("en-US");
DateTime time1 = DateTime.ParseExact("6/15/2013", "d", provider);                    
DateTime now = DateTime.Now;
int num = DateTime.Compare(time1, now);

"num" は、dnn サイトの言語がドイツ語か英語かに関係なく 1 を返します。

4

1 に答える 1