7

高ソルブ文化 (hsb) を使用すると、文字列に変換された DateTime オブジェクトは "d. M. yyyy H.mm.ss 'hodź.'" の形式を使用します。たとえば、ToString("G") は "31. 12. 2011 5.06.07 hodź." を返します。2011 年 12 月 31 日午前 05:06:07 の場合。

問題は、そのような文字列を DateTime に変換しようとしても true にならないことです。"1. 1. 2011" や "1.1.2011" のような単純な文字列でさえ、成功しません。そして、誰かが変換/パーシング時に文化を渡すことを提案した場合に備えて: 私はもちろんそれを行いました.

「1.2.3」を解析しようとすると、現在の日付の時刻が 01:02:03 になります。

私はそれをバグだと考えています。それとも誰かが何が間違っているのか知っていますか?

Windows 8 RTM マシンで .NET 4.5 RTM を使用しています。

サンプル:

DateTime date = DateTime.Now;

CultureInfo culture = new CultureInfo("hsb");
string dateString = date.ToString("G", culture);
DateTime convertedDate; 

bool dateOkay = DateTime.TryParse(dateString, culture,
   DateTimeStyles.AllowInnerWhite, out convertedDate);
Console.WriteLine(dateOkay); 
// This results false although the date string was read by 
// ToString("G") (i.e. '20. 9. 2012 12.28.10 hodź.') and should be okay

dateString = "1. 1. 2000";
dateOkay = DateTime.TryParse(dateString, culture,
   DateTimeStyles.AllowInnerWhite, out convertedDate);
Console.WriteLine(dateOkay); 
// This results in false although the date string should be okay

dateString = "1.1.2000";
dateOkay = DateTime.TryParse(dateString, culture,
   DateTimeStyles.AllowInnerWhite, out convertedDate);
Console.WriteLine(dateOkay); 
// This results also in false

dateString = "1.2.3";
dateOkay = DateTime.TryParse(dateString, culture,
   DateTimeStyles.AllowInnerWhite, out convertedDate);
Console.WriteLine(dateOkay + ": " + convertedDate); 
// This results strangely in true. The converted date is the current date 
// with time 01:02:03.
4

1 に答える 1

0

.Net 4.5 では、"hsb" はニュートラル カルチャとしてマークされているため、すべての DateTime 解析は標準形式プロバイダーによって行われます。代わりに、フォーマット文字列で DateTime.ParseExact を使用してください。 http://www.codeproject.com/Articles/3612/Use-of-different-Date-Time-formats-and-Culture-typ

===============================

CultureInfo のフラグ「IsNeutralCulture」が「true」に等しい場合、日付文字列が不変形式 (en-US) で解析されることがわかりました。形式 MM/dd/yyyy を渡すと、DateTime.TryParse はカルチャ "hsb" の日付を適切に解析しました。

そして、私が提供した記事からの引用:「DateTimeFormatInfo は、ニュートラル カルチャではなく、インバリアント カルチャまたは特定のカルチャに対してのみ作成できます。DateTimeFormatInfo は Object から継承し、ICloneable および IFormarProvider インターフェイスを実装します。」

「hsb」カルチャに DateTimeFormatInfo が指定されていることがわかりましたが、先ほどお伝えしたように IsNeutralCulture = true です。「IsNeutralCulture」が「true」に等しい場合、.Net Framework 4.5 DateTimeFormatInfo は日付の解析に使用されないことを期待しています

于 2013-04-02T13:39:58.660 に答える