.NET 4.5 DateTime格式/转换上索布文化错误

.NET 4.5 DateTime格式/转换上索布文化错误,.net,datetime,hsb,.net,Datetime,Hsb,使用上索布文化(hsb),转换为字符串的日期时间对象使用格式“d.M.yyyy H.mm.ss'hodź”。例如,ToString(“G”)为31返回“31.12.2011 5.06.07 hodź.”。2011年12月11日,上午05:06:07 但问题是,尝试将这样的字符串转换回DateTime并不会得到true。即使是像“1.1.2011”或“1.1.2011”这样更简单的字符串也不会成功。万一有人建议在转换/传播时传递文化:我当然这么做了 尝试分析“1.2.3”结果时,当前日期为01:0

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

但问题是,尝试将这样的字符串转换回DateTime并不会得到true。即使是像“1.1.2011”或“1.1.2011”这样更简单的字符串也不会成功。万一有人建议在转换/传播时传递文化:我当然这么做了

尝试分析“1.2.3”结果时,当前日期为01:02:03

我认为这是一个错误。或者有人知道会出什么问题吗

我在Windows8RTM机器上使用.NET4.5RTM

样本:

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.
在.NET4.5中,“hsb”被标记为中性区域性,因此所有日期时间解析都将由标准格式提供程序完成。将DateTime.ParseExact与格式字符串一起使用。

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

我发现当CultureInfo中的标志“IsNeutralCulture”等于“true”时,日期字符串以不变格式解析(en-US)。当我传递格式MM/dd/yyyy DateTime.TryParse时,正确解析了区域性“hsb”的日期

我提供的文章中有一些引用:“只能为固定区域性或特定区域性创建DateTimeFormatInfo,而不能为中性区域性创建DateTimeFormatInfo。DateTimeFormatInfo继承自对象并实现IClonable和IFormarProvider接口。”


我发现DateTimeFormatInfo是为“hsb”区域性指定的,但正如我前面所说的,IsNeutralCulture=true。我希望在.Net framework 4.5 DateTimeFormatInfo中,当“IsNeutralCulture”等于“true”时,它不会用于解析日期。

Hmm。您的第一个示例适用于我,来自Windows 7,但使用的是.Net 4.5 RTM。您能将其编辑成一个简短但完整的控制台应用程序吗?您的评论员指出了一些正确的答案,但没有一个问题被标记为已回答。你知道这个检查表明答案是正确的。@Jon:听起来Windows 8上有问题(Microsoft更改了许多日期格式)。这是一个简化但有效的控制台应用程序代码:CultureInfo culture=new CultureInfo(“hsb”);DateTime日期=新的日期时间(2011、12、31、5、6、7);字符串dateString=date.ToString(“G”,区域性);日期时间转换日期;bool dateok=DateTime.TryParse(日期字符串,区域性,DateTimeStyles.allownerwhite,out-convertedDate);控制台写入线(DateOK);dateString=“1.1.2000”;dateOkay=DateTime.TryParse(dateString,区域性,DateTimeStyles.AllownErwhite,OutConvertedDate);控制台写入线(DateOK);dateString=“1.1.2000”;dateOkay=DateTime.TryParse(dateString,区域性,DateTimeStyles.AllownErwhite,OutConvertedDate);控制台写入线(DateOK);dateString=“1.2.3”;dateOkay=DateTime.TryParse(dateString,区域性,DateTimeStyles.AllownErwhite,OutConvertedDate);控制台写入线(DateOK);控制台写入线(转换日期)@JürgenBayer:请将控制台应用程序编辑到你的问题中——评论中的代码读起来不太好。当然,“hsb”是一种中立的文化。正如“en”或“de”一样。“标准格式提供程序”是什么意思。即使对于中性区域性,也会使用适当的格式提供程序。尝试任何中立的文化。问题不在于如何格式化日期。我想得到的字符串对于上索布阶是正确的。问题是,在尝试解析格式化日期时,无法将其识别为日期。