2016-06-27 9 views
1

Umm al-Quraカレンダーで日時の動作がどのように機能するのか、バグかどうか不明なために問題があるかどうかはわかりません。アラビア文化の日時解析で期待値が返されない

私は、現在、内部のユーティリティクラスが現在のカルチャに関係なく値を適切に解析することを保証するためのテストを作成しています。

以下のコードでは、dt1dt2と等しくなります。

public void ArabicTesting() 
    { 
     CultureInfo culture = new CultureInfo("ar"); 

     // Initialize a new datetime (04/01/2048 06:21:01 AM) 
     DateTime dt1 = new DateTime(2048, 4, 1, 6, 21, 1); 

     // Convert the datetime to a string using arabic cultureinfo 
     // string ends up being "17/06/70 06:21:01 ص," 
     string dt2_string = $"{dt1.ToString(culture.DateTimeFormat.ShortDatePattern)} {dt1.ToString(culture.DateTimeFormat.LongTimePattern)}"; 

     // Parse the string 
     DateTime dt2; 
     DateTime.TryParse(dt2_string, culture, DateTimeStyles.None, out dt2); 
    } 

問題がDateTime.TryParseが同じに表示されますが、期待されているものとは異なる値を持っている日時に文字列としてdatetime型を解析していることです。ここで

は何が起こっているかのスクリーンショットのカップルです:あなたは、両方の DT1DT2プレビュー値を見れば

dt1 dt2

は、彼らが現れると同じ「17/06/70 06:21:01ص "しかし、オブジェクトの実際の値はまったく異なっています。

これはMSのバグかどうかを知っている人ですか、それともDateTime.TryParseメソッドに正しい文字列の値を渡していないからですか?

+1

'ShortDatePattern'の代わりに' LongDatePattern'を使うとどうなりますか?このシナリオではうまくいきました@Igor - ありがとうございます。@ dt1.ToString(culture.DateTimeFormat.LongDatePattern){dt1.ToString(culture.DateTimeFormat.LongTimePattern)} "; ' – Igor

+0

@Igor私はまだ心配していますが、DateTimeのデフォルトのToStringメソッドが異なる日付の同じ値を返すというのは私にとっては問題に思えます。 アラビア文化の短い日付パターンを使用するのが標準ではありません。 – user2338408

答えて

1

完全な日付がキャプチャされていることを確認するには、ShortDatePatternの代わりにLongDatePatternを使用してみてください。 ShortDatePatternは、デフォルト値が誤ってそのような通年(例)として解析方法において想定されるかもしれない日付構成要素を省略することができように2の

string dt2_string = $"{dt1.ToString(culture.DateTimeFormat.LongDatePattern)} {dt1.ToString(culture.DateTimeFormat.LongTimePattern)}"; 

結果は、これに基づいて異なる可能性があります。どの部分が仮定されているかどうかは、使用されている文化によって異なります。また、いくつかの文化はどちらかといえばうまくいっていますが、アラビア語のような問題もあります。

これがなぜこのような場合に発生したかをデバッグするには、dt1.ToString(culture.DateTimeFormat.LongDatePattern)dt1.ToString(culture.DateTimeFormat.ShortDatePattern)の2つの文字列を比較し、実行時の現在の日付/時刻のデフォルト値で置き換えることができる日付の部分を確認します。

+0

英語の文化にも存在すると思いますが(例えば、06/27/16)、 ということもありますが、複数の日付を参照することができる日付を書くためのパターンが存在するのは逆説的です。私はこの問題が今起こっている理由を簡単に知ることができます。それは間違いなく知って良いです、それで助けてくれてありがとう! – user2338408

関連する問題