日期时间转换异常



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

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

相关内容

  • 没有找到相关文章

最新更新