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 の設定で言語をドイツ語 ( ) に変更すると、 の値が -になります。結果はとなり、意味はよりも早い。は実際には より遅いため、これは正しくありません。DateTime
time1
DateTime
now
de-DE
now
31/5/2013 2:20:33 AM
num
-1
time1
now
time1
now
値はサーバーから取得されるため、常にフォーマットされていますtime1
。mm/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 を返します。