2013-01-22 114 views
1

我想格式化日期时间列表。一个日期的格式与我所提供的格式相同,但因素不适用。该行代码如下。有人能告诉我如何跳过下面的行错误吗?DateTime转换异常

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

这段代码有什么问题?你在说什么“因素”? –

+0

你有什么异常? – davioooh

+0

试试这个,我没有得到任何错误。你遇到了什么错误?运行该应用程序的文化是什么。 – Oded

回答

3

我会避免使用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? 
} 
+0

如何将22-01-2013的格式转换为'yyyy-MM-dd'?我只需要'yyyy-MM-dd'的日期时间:( – NewBie

+0

@NewBie:如果您知道格式将始终为'dd-MM-yyyy',则应该使用'TryParseExact'而不是'TryParse'。您的问题是在您的预期投入方面非常不明确。 –

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变种,它允许你优雅处理解析错误。

0

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

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

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开发人员都应该阅读。

0

尝试与:

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

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