看到一个奇怪的问题,在某些系统上,下面的代码进入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");
}
答案 0 :(得分:3)
DateTime
的字符串表示是特定于文化的。
传递一个空字符串或null
作为format
ToString
重载的DateTime
参数与传递standard format specifier "G"
相同 - 来自备注DateTime.ToString Method (String) msdn页面的一部分:
如果format为null或空字符串,则使用通用格式说明符'G'。
您使用的TryParse
重载尝试使用DateTime
格式参数 - IFormatProvider
中可用的日期和时间格式解析InvariantCulture
值 - 所以当TryParse
与InvariantCulture
一起使用时,除非您当前文化的ShortDatePattern
和LongTimePattern
属性与InvariantCulture
中的属性相同,否则tryParse
将失败