DateTime.Parse 美国日期格式 C#
Posted
技术标签:
【中文标题】DateTime.Parse 美国日期格式 C#【英文标题】:DateTime.Parse American Date Format C# 【发布时间】:2011-08-21 18:35:47 【问题描述】:可能是一个简单的问题 -
我正在从多个文件中读取数据。
我的问题是,当我从美国文件中读取日期时,我会这样解析它:
DateSold = DateTime.Parse(t.Date)
这会将字符串 t.Date 解析为日期格式,但是它将美国日期格式化为欧洲日期,例如
如果文件中的日期为 03/01/2011,则读取为 2011 年 1 月 3 日,而应该是 2011 年 3 月 1 日。
有没有办法让它格式化为欧洲日期?
【问题讨论】:
【参考方案1】:var dt = DateTime.ParseExact(t.Date, "MM/dd/yyyy", CultureInfo.InvariantCulture);
DateTime 本身没有格式,只有当您将其转换为字符串或从字符串转换时,格式才是相关的。
要以美国格式查看日期,请将格式传递给 ToString 方法
string americanFormat = dt.ToString("MM/dd/yyyy");
【讨论】:
【参考方案2】:如果您要从一个特别是美国格式文件的文件中解析日期,那么只需将美国文化信息传递给解析函数,如下所示;
var usCulture = "en-US";
var dateValue = DateTime.Parse(dateString, new CultureInfo(usCulture, false));
这样,您可以简单地换出解析所需的每个不同区域的文化字符串。此外,您不再需要研究每种文化的特定日期时间格式的细微差别,因为 .Net 会按照设计为您解决这个问题。
【讨论】:
这根本不能回答问题。 OP 在询问如何将美国日期解析为欧盟日期,您只是告诉他如何将美国日期解析为美国日期。 Brian Scott 完全按照 OP 的要求做了。存储在 dateValue 中的日期是将 dateString 解释为美国日期 - 但如果现在它是结构化的,那么您可以要求 dateValue.Month。如果您想以欧洲风格显示它,请继续将其转换回字符串,如接受的答案中所示。这个答案非常有用,因为它显示了使用不同的 CultureInfo 进行解析,而不是对日期格式进行硬编码。【参考方案3】:解析时使用DateTime.ParseExact
或DateTime.TryParseExact
,使用ToString
格式化时也要指定格式字符串。
请注意,解析后不存在“美国日期”之类的东西。 DateTime
值没有格式的概念。
听起来您实际上对 Parse
部分并不像格式化部分那样感兴趣,例如
string formatted = dt.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
...但我建议您明确控制解析和格式。
如果您有不同的文件格式,则在读取每个文件时需要提供不同的格式字符串。然后如何格式化数据是一个单独的决定。
【讨论】:
【参考方案4】:如果您提前知道格式,您可以使用DateTime.ParseExact,使用美国格式作为您的格式字符串。
【讨论】:
【参考方案5】:string formatteddate=DateTime.Now.ToString("d") // output: 11/8/2012
string formatteddate=DateTime.Now.ToString("D") // output: Monday, November 08, 2012
string formatteddate=DateTime.Now.ToString("f") // output: Monday, November 08, 2012 3:39 PM
string formatteddate=DateTime.Now.ToString("g") // output: Monday, November 08, 2012 3:39:46 PM
string formatteddate=DateTime.Now.ToString("d") // output: 11/8/2012 3:39 PM
此处提供了更多 asp.net 中的日期时间格式。
http://dateformat.blogspot.in/2012/09/date-time-format-in-c-aspnet.html
【讨论】:
问题是关于解析日期时间,而不是关于格式化输出。可以使用DateTime.Parse()
方法的重载来解决问题。指定正确的文化信息:dateValue = DateTime.Parse(dateString, new CultureInfo("fr-FR", false));
您的 1 和 5 相同但输出不同,string formatteddate=DateTime.Now.ToString("d")
。这怎么可能?以上是关于DateTime.Parse 美国日期格式 C#的主要内容,如果未能解决你的问题,请参考以下文章