首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这不是一个法定的OleAut日期,TimeSpan是100小时100分钟

问为什么这不是一个法定的OleAut日期,TimeSpan是100小时100分钟
EN

Stack Overflow用户
提问于 2019-05-30 12:07:30
回答 1查看 1.1K关注 0票数 2

我正在尝试从一个有100小时100分钟的TimeSpan中创建一个日期,但是我得到了一个错误:

运行时异常(第9行):不是合法的OleAut日期. 堆栈跟踪: System.OverflowException:不是合法的OleAut约会。at System.DateTime.TicksToOADate(Int64值)

代码语言:javascript
复制
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中的遗留值。

它适用于小时和分钟值,但却失败了,有什么想法吗?

创建了一个小提琴

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-30 12:14:49

让我们看一看您要转换为OADate的日期

代码语言:javascript
复制
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));

你会得到这个的

代码语言:javascript
复制
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低于最小值),并且引发异常。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56378031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档