范围:
我一直在尝试开发一个 超容错
的 DateTime.Parse 程序,所以我决定尝试使用大多数“广泛使用”的格式,以更好地理解 格式掩码
。
问题:
我定义了一个特定的格式(字符串),我使用 myDate.ToString(format)
,它非常有效。问题是,如果我获取相同的字符串(.ToString(format)
操作的结果)并将其提供给 DateTime.TryParseExact(...)
,它会失败。
代码/测试:
System.Globalization.CultureInfo provider = System.Globalization.CultureInfo.InvariantCulture;
// Defining Format and Testing it via "DateTime.ToString(format)"
string format = "MM/dd/yyyy HH:mm:ss tt";
string dtNow = DateTime.Now.ToString (format);
Console.WriteLine (dtNow);
// Trying to Parse DateTime on the same Format defined Above
DateTime time;
if (DateTime.TryParseExact (dtNow, format, provider, System.Globalization.DateTimeStyles.None, out time))
{
// If TryParseExact Worked
Console.WriteLine ("Result: " + time.ToString ());
}
else
{
// If TryParseExact Failed
Console.WriteLine ("Failed to Parse Date");
}
输出结果为:
"无法解析日期"
。问题:
为什么我可以使用“格式”字符串将某个日期格式化为文本,但我不能使用相同的“格式”将字符串反馈给日期对象?
编辑:
我已经将我的一部分方法添加到此示例中,并且我想知道为什么“ParseDate”方法无法返回正确的日期,考虑到“String”格式正确。
CurrentCulture
是什么? - Soner Gönülstring dtNow = DateTime.Now.ToString(format, provider)
,在转换为字符串时添加区域设置。 - Sriram Sakthivelpt-BR
(葡萄牙语(巴西))上失败。 - Jesse GoodCultureInfo.InvariantCulture
,它不会失败。 - Jesse Goodpt-BR
,它能够正常工作的原因是CultureInfo.InvariantCulture
期望在具有该格式的字符串中包含AM/PM
指示符,而pt-BR
则没有。 - Jesse Good