1

我正在尝试格式化日期时间列表。一个日期的格式与我提供的相同,但因素不到位。该行代码如下所示。有人可以告诉我如何跳过下一行的错误吗?

Convert.ToDateTime("22-01-2013 00:00:00").ToString("yyyy-MM-dd");
4

4 回答 4

6

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

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

如果您有多种可能的格式,您应该考虑使用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?
}
于 2013-01-22T10:37:33.730 回答
2

而不是Convert.ToDateTime使用DateTime.ParseDateTime.ParseExact

ParseExact使您可以更好地控制格式,例如:

DateTime.ParseExact("22-01-2013 00:00:00","dd-MM-yyyy HH:mm:ss",CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");

还有一个TryParseExact变体,它允许您优雅地处理解析错误。

于 2013-01-22T10:36:45.380 回答
0

尝试使用DateTime.ParseExact()方法代替。

将日期和时间的指定字符串表示形式转换为其等效的 DateTime。

public static void Main(string[] args)
{

    Console.WriteLine(DateTime.ParseExact("22-01-2013 00:00:00", "dd-MM-yyyy HH:mm:ss", CultureInfo.CurrentCulture).ToString("yyyy-MM-dd"));

}

这是一个DEMO.

另请查看Coding Best Practices Using DateTime in the .NET Framework我认为每个 .NET 开发人员都应该阅读的内容。

于 2013-01-22T10:37:09.383 回答
0

尝试:

DateTime.ParseExact("22-01-2013 00:00:00","dd-MM-yyyy HH:mm:ss",CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");

这样您就可以指定日期字符串的确切格式。

于 2013-01-22T10:40:46.387 回答