DateTime转换的例外情况

时间:2013-01-22 10:35:12

标签: c# asp.net datetime

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

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

4 个答案:

答案 0 :(得分:4)

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

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

如果您有多种可能的格式,则应考虑using the overload of TryParseExact which allows you to specify multiple formats in a single call

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

编辑:如果您的输入总是,格式为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?
}

答案 1 :(得分: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变体,它允许您优雅地处理解析错误。

答案 2 :(得分: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

同时查看我认为每个.NET开发人员应阅读的Coding Best Practices Using DateTime in the .NET Framework

答案 3 :(得分:0)

尝试:

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

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