我正在尝试格式化日期时间列表。一个日期的格式与我提供的格式相同,但因素不合适。下面给出了这行代码。有人能告诉我如何跳过以下行的错误吗?
Convert.ToDateTime("22-01-2013 00:00:00").ToString("yyyy-MM-dd");
答案 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.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
变体,它允许您优雅地处理解析错误。
答案 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");
这样您就可以指定日期字符串的确切格式。