我正在尝试从具有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
答案 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是低于最小值)并且抛出异常的原因。