【问题标题】:Why does Convert.ToDateTime(Int64) fail?为什么 Convert.ToDateTime(Int64) 失败?
【发布时间】:2013-11-10 19:20:44
【问题描述】:

为什么以下失败并显示“从 'Int64' 到 'DateTime' 的无效转换”。异常?

long oldDate=new DateTime(2015, 1, 1).Ticks;
DateTime newDate=Convert.ToDateTime(oldDate);

.Ticks 是 long/Int64,Convert.ToDateTime(Int64) MSDN 文档显示了接受 long/Int64 的方法。

public static DateTime ToDateTime(
  long value
)

编辑: 正如下面的 ebyrob 所指出的,它应该是:

long oldDate=new DateTime(2015, 1, 1).Ticks;
DateTime newDate=new DateTime(oldDate);

【问题讨论】:

  • new DateTime(oldDate); 可能会在这里工作...转换逻辑可能不太确定您要做什么。 Convert 必须接受所有支持转换的类型,无论它是否有效。
  • ebyrob 发现了问题。它应该是 new DateTime() 而不是 Convert.ToDateTime()。

标签: c# .net datetime


【解决方案1】:

来自Convert.ToDateTime Method (Int64) 上的 MSDN 文档:

调用此方法总是抛出 InvalidCastException。

返回值 类型:System.DateTime 不支持此转换。没有返回值。

来源:http://msdn.microsoft.com/en-us/library/400f25sk.aspx(链接指向 .NET 4.5 文档,但所有版本都相同,直到 2.0)。

我不确定为什么不支持此功能,尤其是在 new DateTime(oldDate) 运行良好的情况下:

DateTime newDate = new DateTime(oldDate);

【讨论】:

  • "调用此方法总是抛出 InvalidCastException。" => 哈!有用。一定是 v1.x 时代的那些“我们真的不应该这样做”的残余物之一。
【解决方案2】:

DateTime.FromBinary(oldDate) 确实有效

【讨论】:

    猜你喜欢
    • 2011-05-16
    • 2015-06-19
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多