字符串不是c#中的有效日期时间

本文关键字:有效日期 时间 字符串 | 更新日期: 2023-09-27 18:26:22

当我尝试将字符串"25-12-2014 15:35"转换为DateTime时,我得到一个异常,即该字符串不是有效的DateTime。如何避免此异常?

String Mydate= col.Get("StartDate");
DateTime startDate = DateTime.ParseExact(MyString, "dd-MM-yyyy", null);

字符串不是c#中的有效日期时间

来自文档;

将指定的日期和时间的字符串表示形式转换为使用指定格式的等效DateTime特定于区域性的格式信息字符串的格式表示形式必须与指定的格式完全匹配

在你的情况下,他们不是。你的小时和分钟部分没有使用任何格式。请改用dd-MM-yyyy HH:mm格式。

string s = "25-12-2014 15:35";
DateTime dt;
if(DateTime.TryParseExact(s, "dd-MM-yyyy HH:mm", null,
                          DateTimeStyles.None, out dt))
{
    Console.WriteLine(dt);
}

由于将null用作IFormatProvider,因此默认情况下使用CurrentCulture。如果CurrentCultureTimeSeparator属性不是:,则如果日期字符串和格式字符串的格式相同,则解析操作将失败。

在这种情况下,您可以使用CultureInfo.Clone方法克隆当前区域性,并将其TimeSeparator属性设置为:,也可以使用已经有:InvariantCulture作为时间分隔符。

您可以尝试准确解析它:

DateTime d = DateTime.ParseExact("25-12-2014 15:35", "dd-MM-yyyy HH:mm", CultureInfo.InvariantCulture);

或者使用正确的文化(例如荷兰语):

DateTime d = DateTime.Parse("25-12-2014 15:35", new CultureInfo("nl-NL"));