DateTime.TryParse还是Datetime.TryParseExact?

Akh*_*hil 1 .net c# datetime

我正在从字符串转换日期和时间.我从我的输入中添加日期部分,如下所示

string joinedString = txtMonth.Text.Trim() + "/" + txtDate.Text.Trim() + "/" + txtYear.Text.Trim();
Run Code Online (Sandbox Code Playgroud)

通常我转换字符串如下

DateTime dt;
if (DateTime.TryParse(joinedString, out dt))
{
    lblOutputCulture.Text = dt.ToString();
}
else
{
    lblOutputCulture.Text = "Invalid Date Time!!!";
}
Run Code Online (Sandbox Code Playgroud)

如果文化的文化和日期时间格式与我的字符串模式相同,我可以在这里获得日期时间.但如果它像'dd-MM-yy'那样被转换,那么转换就会失败.

为了克服这个问题,我们需要使用InvariantCulture进行解析.为此我发现了2种方法

方法1:使用DateTime.TryParse

if (DateTime.TryParse(joinedString, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
{
    lblOutput.Text = dt.ToString();
}
else
{
    lblOutput.Text = "Invalid Date Time!!!";
}
Run Code Online (Sandbox Code Playgroud)

即使更改了系统的日期时间格式,也会成功转换日期时间.以下优点i)日期和月份输入是1位数或2位数ii)年输入是2位数或4位数

方法2:使用DateTime.TryParseExact

if (DateTime.TryParseExact(joinedString, "M/d/yy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
{
    lblOutput.Text = dt.ToString();
}
else
{
    lblOutput.Text = "Invalid Date Time!!!";
}
Run Code Online (Sandbox Code Playgroud)

这里也将datetime转换为具有特定文化但严格按照我在tryparseexact语句中给出的格式.

但以下是这个问题i)如果我给4位数年份输入它显示无效的日期和时间.如果我将格式更改为'M/d/yyyy',我将无法提供2位数的年份数.就像我添加时间部分一样,我需要给时间部分强制性.

哪一个更好?请提出建议.但主要是我在所有博客和论坛中找到了第二种方法..

哪一个是正确的?

Dam*_*ver 5

我不会用:

try {
  DateTime dt = new DateTime(int.Parse(txtYear.Text),
                             int.Parse(txtMonth.Text),
                             int.Parse(txtDate.Text));
   lblOutput.Text = dt.ToString(); //Not sure why we'd do this, but whatever
} catch (ArgumentOutOfRangeException) {
   lblOutput.Text = "Invalid Date Time!!!";
}
Run Code Online (Sandbox Code Playgroud)

通过选择构造函数的不同重载,这很容易扩展到包括其他部分,例如时间.