【发布时间】:2018-03-20 13:24:45
【问题描述】:
看到一个奇怪的问题,在某些系统上,下面的代码进入 if 语句(即它返回 true),而在其他系统中它返回 false 并进入 else 语句。我错过了哪些环境条件或框架版本更改?例如 .net Fiddle 返回 true,但我自己的控制台应用程序返回 false。
DateTime time;
formatText = "";
if (DateTime.TryParse (DateTime.Now.ToString(formatText), CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out time))
{
// If TryParseExact Worked
Console.WriteLine ("True: " + time.ToString ());
}
else
{
// If TryParseExact Failed
Console.WriteLine ("Failed to Parse Date");
}
【问题讨论】:
-
"如果格式为
null或空字符串,则使用通用格式说明符 'G'。"当前区域性的G格式不需要匹配不变区域性接受的任何格式。如果您想要一致的结果,也可以在.ToString中指定CultureInfo.InvariantCulture。 -
"
// If TryParseExact Worked" 但不是TryParseExact,是TryParse... -
如果你想知道它到底在哪些文化上失败了 - 遍历
CultureInfo.GetCultures(CultureTypes.AllCultures)并使用DateTime.Now.ToString(formatText, culture)为每个文化执行你的代码。 -
.Net Fiddle 显示
G的区域性 toString 输出以及它们是否通过了您的测试。
标签: c# .net parsing datetime datetime-format