.NET 4.5 DateTime格式/转换上索布文化的bug

时间:2012-09-18 18:22:38

标签: .net datetime hsb

使用上索布文化(hsb)转换为字符串的DateTime对象使用格式“d.M.yyyyH.mm.ss'hodź。'”。例如ToString(“G”)返回“31. 12. 20115.06.07hodź。” 2011年12月31日上午05:06:07

问题是尝试将这样的字符串转换回DateTime不会导致结果为真。甚至更简单的字符串如“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.

1 个答案:

答案 0 :(得分: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)进行分析。当我为格式“hsb”正确传递格式MM / dd / yyyy DateTime.TryParse解析日期时。

有些引用文章,我提供:“DateTimeFormatInfo只能为不变文化或特定文化创建,而不能为中性文化创建.DateTimeFormatInfo继承自Object并实现ICloneable和IFormarProvider接口。”

我发现DateTimeFormatInfo是为“hsb”文化指定的,但正如我之前所说,IsNeutralCulture = true。我希望.Net framework 4.5当“IsNeutralCulture”等于“true”时,DateTimeFormatInfo不用于解析日期