我正在尝试从一个有100小时100分钟的TimeSpan中创建一个日期,但是我得到了一个错误:
运行时异常(第9行):不是合法的OleAut日期. 堆栈跟踪: System.OverflowException:不是合法的OleAut约会。at 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中的遗留值。
它适用于小时和分钟值,但却失败了,有什么想法吗?
创建了一个小提琴
发布于 2019-05-30 12:14:49
让我们看一看您要转换为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));你会得到这个的
5 January 0001 05:40:00但根据手册 (粗体是我的)
基本的OLE自动化日期是1899年12月30日午夜。最低 OLE自动化日期是午夜,1月1日,。最大OLE自动化日期与DateTime.MaxValue相同,即9999年12月31日的最后一刻。
这就是为什么DateTime.MinValue.AddTicks(timeSpan.Ticks).ToOADate()是非法的(OADate低于最小值),并且引发异常。
https://stackoverflow.com/questions/56378031
复制相似问题