【问题标题】:Firebird date cannot be parsed火鸟日期无法解析
【发布时间】:2012-03-01 12:19:19
【问题描述】:

我有一个 firebird 数据库,有些表有时间戳。例如,我的数据库返回这样的日期:“1/4/2012 3:08:44 PM”或“12/20/2011 4:38:02 PM”。我使用 TryParseExact,代码如下:

DateTime.TryParseExact(results[i][1], "M/d/yyyy h:mm:ss tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)

我尝试了许多格式,例如“MM/dd/yyyy hh:mm:ss tt”,但都没有奏效。请帮帮我,否则这次我会疯掉的……

【问题讨论】:

  • 我刚刚在 Linqpad 中快速测试了您的代码,并解析了两个字符串(“1/4/2012 3:08:44 PM”、“12/20/2011 4:38:02 PM”)成功地。能否再举一个解析失败的例子?
  • 我用“G”解决了:link
  • 您确定resultst[i][1] 中包含的对象还不是日期时间吗?
  • 我为此尝试了修剪、正则表达式等多个空格。我数了一下,没问题。

标签: c# datetime timestamp firebird tryparse


【解决方案1】:

看看这篇文章

http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

要看的关键部分是

// Parse date-only value without leading zero in month using "d" format.
// Should throw a FormatException because standard short date pattern of 
// invariant culture requires two-digit month.
dateString = "6/15/2008";
try {
   result = DateTime.ParseExact(dateString, format, provider);
   Console.WriteLine("{0} converts to {1}.", dateString, result.ToString());
}
catch (FormatException) {
   Console.WriteLine("{0} is not in the correct format.", dateString);
}

因此,您的数据库可能没有返回标准模式。对我来说似乎很愚蠢,但这会引发异常。在这个例子中,它只是说一个“仅限日期”的值,而你的不是。

如果你有一个字符串中的日期,你可以做旧的手动修复:

public static string FixDate(string date)
{
    return (date.IndexOf('/') == 1) ? "0" + date : date;
}

【讨论】:

    猜你喜欢
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    相关资源
    最近更新 更多