我正在尝试格式化日期时间列表。一个日期的格式与我提供的相同,但因素不到位。该行代码如下所示。有人可以告诉我如何跳过下一行的错误吗?
Convert.ToDateTime("22-01-2013 00:00:00").ToString("yyyy-MM-dd");
我会避免使用Convert.ToDateTime
开始。我建议使用DateTime.TryParse
or (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?
}
而不是Convert.ToDateTime
使用DateTime.Parse
或DateTime.ParseExact
ParseExact
使您可以更好地控制格式,例如:
DateTime.ParseExact("22-01-2013 00:00:00","dd-MM-yyyy HH:mm:ss",CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");
还有一个TryParseExact
变体,它允许您优雅地处理解析错误。
尝试使用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 开发人员都应该阅读的内容。
尝试:
DateTime.ParseExact("22-01-2013 00:00:00","dd-MM-yyyy HH:mm:ss",CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");
这样您就可以指定日期字符串的确切格式。