我刚开始接触DotNet和C#。我想将一个以mm/dd/yyyy格式表示的字符串转换为
DateTime
对象。我尝试使用以下解析函数,但它会抛出运行时错误。DateTime dt=DateTime.Parse("24/01/2013");
你有什么想法可以将它转换为日期时间吗?
DateTime.ParseExact
,格式为 "dd/MM/yyyy"
。DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);
如果您使用d/M/yyyy
格式,那么更安全,因为它可以处理单个数字和双位数字的日期和月份。但这真的取决于您是否期望单个或双位数字值。
对于某些文化来说,您的日期格式day/Month/Year
可能是可接受的日期格式。例如,在加拿大文化中en-CA
,DateTime.Parse
将按以下方式工作:
DateTime dt = DateTime.Parse("24/01/2013", new CultureInfo("en-CA"));
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA");
DateTime dt = DateTime.Parse("24/01/2013"); //uses the current Thread's culture
两行代码都可以工作,因为字符串的格式可接受 en-CA
文化。由于您没有向 DateTime.Parse
方法提供任何文化信息,所以默认使用当前文化进行解析,而当前文化不支持该日期格式。有关详细信息,请参阅DateTime.Parse。
另一种解析方法是使用DateTime.TryParseExact
DateTime dt;
if (DateTime.TryParseExact("24/01/2013",
"d/M/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None,
out dt))
{
//valid date
}
else
{
//invalid date
}
.Net框架中的TryParse
方法组在解析无效值时不会抛出异常,而是返回一个表示解析是否成功的bool
值。
注意:我在日和月上使用了单个的d
和M
。单个的d
和M
适用于单、双位数的日和月。因此,对于格式d/M/yyyy
,有效值可以是:
如需进一步了解,请参阅:自定义日期和时间格式字符串
使用 DateTime.ParseExact
方法
string strDate = "24/01/2013";
DateTime date = DateTime.ParseExact(strDate, "dd/MM/yyyy", null)
null
会使用当前文化,这有一定风险。请尝试提供一个具体的文化。
DateTime date = DateTime.ParseExact(strDate, "dd/MM/yyyy", CultureInfo.InvariantCulture)
"dd/MM/yyyy"
格式,并在DateTime.ParseExact
中使用它。
使用指定的格式和特定于文化的格式信息,将日期和时间的指定字符串表示形式转换为其DateTime等效项。 字符串表示形式的格式必须与指定的格式完全匹配。
DateTime date = DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);
这里有一个演示
。
更多信息,请查看自定义日期和时间格式字符串
。
System.Globalization.CultureInfo.InvariantCulture
。 - Habib