string dateString = "12/9/2014 10:09:28 AM";
DateTime dateTime;
if (DateTime.TryParse(dateString, CultureInfo.GetCultureInfo("en-GB"),
DateTimeStyles.AssumeUniversal, out dateTime))
{
Console.WriteLine(dateTime); //"9/12/2014 10:09:28 PM";
}
Run Code Online (Sandbox Code Playgroud)
当我用"en-US"做同样的事情时,他们会换到 "12/9/2014 10:09:28 PM"
他们为什么每天和每月交换?
他们现在的日期在哪里,一个月在哪里?
他们交换月份和日期,因为在美国,日期格式为月/日/年,而在英国(以及世界其他大部分地区),数据格式为日/月/年.所以在美国"2014年12月9日"是2014年12月9日,而在GB中则是2014年9月12日.
该信息由CultureInfo.DateTimeFormat.
这意味着如果不知道它来自何种文化,就无法解释日期字符串.
这只是因为每种文化都有自己的日期和时间表示法.解释取决于你的文化,就像在美国裤子意味着裤子,但在英国意味着内衣!
在en-GB文化中,日期以"日月份"顺序写入,而在en-US文化日期则以"月日,年"顺序写入.
为了避免意外或依赖机器的文化,您可以使用CultureInfo.InvariantCulture或使用ParseExact.
如果您没有像TryParse呼叫中那样指定文化,则默认为当前线程的文化,即机器的文化.您可能拥有en-US自己的文化,可以在"控制面板">"区域和语言"中查看.