我是DotNet和C#的新手。我想将mm/dd/yyyy
格式的字符串转换为DateTime
对象。我尝试了如下所示的解析函数,但它抛出了运行时错误。
DateTime dt=DateTime.Parse("24/01/2013");
关于如何将其转换为日期时间的任何想法?
答案 0 :(得分:231)
您需要使用格式"dd/MM/yyyy"
DateTime.ParseExact
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
,有效值可以是:
如需进一步阅读,您应该看到:Custom Date and Time Format Strings
答案 1 :(得分:11)
使用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)
答案 2 :(得分:6)
您可以使用"dd/MM/yyyy"
格式在DateTime.ParseExact
中使用它。
将指定的日期和时间字符串表示形式转换为它 DateTime等效使用指定的格式和特定于文化 格式信息。 字符串表示的格式必须匹配 完全符合指定的格式。
DateTime date = DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);
这是DEMO
。
有关更多信息,请查看Custom Date and Time Format Strings