如何在c#中解析字符串到dateTime?

Ana*_*oly 4 c# date

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"

他们为什么每天和每月交换?

他们现在的日期在哪里,一个月在哪里?

shf*_*301 7

他们交换月份和日期,因为在美国,日期格式为月/日/年,而在英国(以及世界其他大部分地区),数据格式为日/月/年.所以在美国"2014年12月9日"是2014年12月9日,而在GB中则是2014年9月12日.

该信息由CultureInfo.DateTimeFormat.

这意味着如果不知道它来自何种文化,就无法解释日期字符串.


Yet*_*der 5

这只是因为每种文化都有自己的日期和时间表示法.解释取决于你的文化,就像在美国裤子意味着裤子,但在英国意味着内衣!

en-GB文化中,日期以"日月份"顺序写入,而在en-US文化日期则以"月日,年"顺序写入.

为了避免意外或依赖机器的文化,您可以使用CultureInfo.InvariantCulture或使用ParseExact.

如果您没有像TryParse呼叫中那样指定文化,则默认为当前线程的文化,即机器的文化.您可能拥有en-US自己的文化,可以在"控制面板">"区域和语言"中查看.

  • @Anatoly,如果你没有指定一个文化,就像你在`TryParse`调用中那样,它默认为当前线程的文化,这是机器的文化. (2认同)