DateTime.Parse美国日期格式C#

109*_*793 22 c# asp.net datetime

可能是一个简单的问题 -

我正在读取许多文件中的数据.

我的问题是,当我从美国文件中读取日期时,我会像这样解析它:

DateSold = DateTime.Parse(t.Date)
Run Code Online (Sandbox Code Playgroud)

这将字符串t.Date解析为日期格式,但是它将美国日期格式化为欧洲日期,例如

如果日期在2011年1月3日的文件中,则为2011年1月3日,即应该是2011年3月1日.

有没有办法这样做,以便格式化为欧洲日期?

Pat*_*ald 33

var dt = DateTime.ParseExact(t.Date, "MM/dd/yyyy", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

DateTime本身没有格式化,只有当您将其转换为格式相关的字符串或从格式相关的字符串转换时.

要使用美国格式查看日期,请将格式传递给ToString方法

string americanFormat = dt.ToString("MM/dd/yyyy");
Run Code Online (Sandbox Code Playgroud)


Bri*_*ott 18

如果要从特定于美国格式的文件的文件中解析日期,则只需将美国文化信息传递到解析函数中,如下所示;

var usCulture = "en-US";
var dateValue = DateTime.Parse(dateString, new CultureInfo(usCulture, false));
Run Code Online (Sandbox Code Playgroud)

这样,您可以简单地换出解析所需的每个不同区域的文化字符串.此外,您不再需要研究每种文化的具体日期时间格式细微差别,因为.Net将按照您的设计为您处理此问题.

  • Brian Scott 完全按照 OP 的要求做了。存储在 dateValue 中的日期是将 dateString 解释为美国日期 - 但如果现在它是结构化的,那么您可以要求 dateValue.Month。如果您想以欧洲风格显示它,请继续将其转换回已接受答案中所示的字符串。这个答案非常有用,因为它显示使用不同的 CultureInfo 进行解析,而不是对日期格式进行硬编码。 (2认同)

Jon*_*eet 7

使用DateTime.ParseExactDateTime.TryParseExact解析时,也可以在格式化时指定格式字符串ToString.

请注意,在解析之后,没有"美国日期"之类的东西.该DateTime没有格式化的概念.

听起来你实际上并没有Parse对格式部分感兴趣,例如

string formatted = dt.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

...但我建议你明确地控制解析格式化.

如果您有不同的文件格式,则在读取每个文件时需要提供不同的格式字符串.然后如何格式化数据是一个单独的决定.