为什么这不是一个合法的OleAut日期,其时间跨度为100小时100分钟

时间:2019-05-30 12:07:31

标签: c# date ole

我正在尝试从具有100小时100分钟的TimeSpan创建日期,但出现错误:

  

运行时例外(第9行):不是合法的OleAut日期。

     

堆栈跟踪:

     

[System.OverflowException:不是合法的OleAut日期。]   System.DateTime.TicksToOADate(Int64值)

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine("Hello World");
        TimeSpan timeSpan = TimeSpan.FromHours(100) + TimeSpan.FromMinutes(100);
        var OADate = DateTime.FromOADate((DateTime.MinValue.AddTicks(timeSpan.Ticks)).ToOADate());

    }
}

这是为了与vb6中的db中的旧值链接。

它适用于小时和分钟较小的值,但是对此失败了,有什么想法吗?

创建了一个Fiddle

1 个答案:

答案 0 :(得分:5)

让我们看看您尝试转换为IUserMenu的日期:

OADate

您会得到的

TimeSpan timeSpan = TimeSpan.FromHours(100) + TimeSpan.FromMinutes(100);

var OADate = DateTime.MinValue.AddTicks(timeSpan.Ticks);

Console.WriteLine(OADate.ToString("d MMMM yyyy HH:mm:ss", CultureInfo.InvariantCulture));

但是根据manual粗体是我的)

  

基本OLE自动化日期是1899年12月30日午夜。   最低是OLE自动化日期,是 0100年1月1日午夜。最大OLE自动化日期与DateTime.MaxValue相同,最后一个   9999年12月31日。

这就是为什么5 January 0001 05:40:00 非法(OADate是低于最小值)并且抛出异常的原因。