我正在尝试格式化日期时间列表。一个日期的格式与我提供的相同,但因素不到位。这行代码如下所示。有人能告诉我如何跳过下面一行的错误吗?
Convert.ToDateTime("22-01-2013 00:00:00").ToString("yyyy-MM-dd");
我将避免使用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?
}
如果您有多种可能的格式,您应该考虑使用TryParseExact
的重载,它允许您在单个调用中指定多种格式。
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?
}
用DateTime.Parse
或DateTime.ParseExact
代替Convert.ToDateTime
ParseExact
为您提供了对格式的更多控制,例如:
DateTime.ParseExact("22-01-2013 00:00:00","dd-MM-yyyy HH:mm:ss",CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");
还有一个TryParseExact
变体,它允许您优雅地处理解析错误。
Try with:
DateTime.ParseExact("22-01-2013 00:00:00","dd-MM-yyyy HH:mm:ss",CultureInfo.InvariantCulture).ToString("yyyy-MM-dd");
这样你可以为你的日期字符串指定确切的格式。
尝试使用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开发人员都应该阅读。