【发布时间】:2012-09-11 01:22:25
【问题描述】:
使用上索布语文化 (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 不会导致结果为真。甚至更简单的字符串,如“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.
【问题讨论】:
-
嗯。您的第一个示例适用于我,来自 Windows 7,但使用 .NET 4.5 RTM。你能把它编辑成一个简短但完整的控制台应用程序吗?
-
您的评论者指出了一些正确的答案,但您的问题都没有标记为已回答。您确实知道检查表明答案正确。
-
@Jon:听起来像是 Windows 8 上的问题(Microsoft 更改了许多日期格式)。这是简化但工作的控制台应用程序代码: CultureInfoculture = new CultureInfo("hsb"); DateTime date = new DateTime(2011, 12, 31, 5, 6, 7); string dateString = date.ToString("G",culture);日期时间转换日期; bool dateOkay = DateTime.TryParse(dateString,culture, DateTimeStyles.AllowInnerWhite, out convertDate); Console.WriteLine(dateOkay); dateString = "1. 1. 2000"; dateOkay = DateTime.TryParse(dateString,culture, DateTimeStyles.AllowInnerWhite, out convertDate);
-
Console.WriteLine(dateOkay); dateString = "1.1.2000"; dateOkay = DateTime.TryParse(dateString, 文化, DateTimeStyles.AllowInnerWhite, out convertDate); Console.WriteLine(dateOkay); dateString = "1.2.3"; dateOkay = DateTime.TryParse(dateString, 文化, DateTimeStyles.AllowInnerWhite, out convertDate); Console.WriteLine(dateOkay); Console.WriteLine(convertedDate);
-
@JürgenBayer:请在您的问题中编辑控制台应用程序 - cmets 中的代码读起来不太好。