日期时间转换异常

New*_*Bie 1 c# asp.net datetime

我正在尝试格式化日期时间列表。一个日期的格式与我提供的格式相同,但因素没有到位。下面给出了这行代码。有人能告诉我如何跳过下面一行的错误吗?

Convert.ToDateTime("22-01-2013 00:00:00").ToString("yyyy-MM-dd");
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

我会避免使用Convert.ToDateTime开始。我建议使用DateTime.TryParseor (最好)DateTime.TryParseExact。这两者都将返回一个指示转换是否成功的值,因此您无需开始捕获异常以跳过坏数据。例如:

DateTime parsed;
if (DateTime.TryParse(text, out parsed))
{
    string reformatted = parsed.ToString("yyyy-MM-dd");
    // Use reformatted
}
else
{
    // Log error, perhaps?
}
Run Code Online (Sandbox Code Playgroud)

如果您有多种可能的格式,您应该考虑使用它的重载,TryParseExact它允许您在单个调用中指定多种格式

除了格式之外,您还应该考虑要使用的文化。在上面的代码(和你的代码)中,它将使用执行线程的文化。这总是你想要的吗?文化可以影响各种事情 - 通常,如果您指定自定义格式,您希望使用不变文化。否则,您最终可能会意外地使用非公历,例如...

编辑:如果您的输入始终是 format dd-MM-yyyy,那么您可能应该使用:

DateTime parsed;
if (DateTime.TryParseExact(text, "dd-MM-yyyy", CultureInfo.InvariantCulture,
                           DateTimeStyles.Default, out parsed))
{
    string reformatted = parsed.ToString(CultureInfo.InvariantCulture,
                                         "yyyy-MM-dd");
    // Use reformatted
}
else
{
    // Log error, perhaps?
}
Run Code Online (Sandbox Code Playgroud)