为什么这是一个时间跨度为 100 小时 100 分钟的非合法 OleAut 日期
Why is this a Not a legal OleAut date with a TimeSpan of 100 hours and 100 minutes
我正在尝试从 TimeSpan
创建一个有 100 小时 100 分钟的日期,但我遇到了错误:
Run-time exception (line 9): Not a legal OleAut date.
Stack Trace:
[System.OverflowException: Not a legal OleAut date.] at
System.DateTime.TicksToOADate(Int64 value)
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());
}
}
这是为了 link 使用来自 vb6 的数据库中的遗留值。
它适用于较小的小时和分钟值,但失败了,有什么想法吗?
创建了 Fiddle
让我们看看您要转换成的日期 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
但是根据manual(粗体是我的)
The base OLE Automation Date is midnight, 30 December 1899. The
minimum OLE Automation date is midnight, 1 January 0100. The maximum OLE Automation Date is the same as DateTime.MaxValue, the last
moment of 31 December 9999.
这就是为什么 DateTime.MinValue.AddTicks(timeSpan.Ticks).ToOADate()
非法 (OADate 低于最小值)并且您抛出了异常。
我正在尝试从 TimeSpan
创建一个有 100 小时 100 分钟的日期,但我遇到了错误:
Run-time exception (line 9): Not a legal OleAut date.
Stack Trace:
[System.OverflowException: Not a legal OleAut date.] at System.DateTime.TicksToOADate(Int64 value)
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());
}
}
这是为了 link 使用来自 vb6 的数据库中的遗留值。
它适用于较小的小时和分钟值,但失败了,有什么想法吗?
创建了 Fiddle
让我们看看您要转换成的日期 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
但是根据manual(粗体是我的)
The base OLE Automation Date is midnight, 30 December 1899. The minimum OLE Automation date is midnight, 1 January 0100. The maximum OLE Automation Date is the same as DateTime.MaxValue, the last moment of 31 December 9999.
这就是为什么 DateTime.MinValue.AddTicks(timeSpan.Ticks).ToOADate()
非法 (OADate 低于最小值)并且您抛出了异常。