出现场景:在进行一些文档导入,数据库文件读取时候存在时间属性的字段为duoble类型的数字,在程序中转换成DateTime类型出现问题
解决方式:
1、DateTime时间转OAdate时间
//当前时间转OADate
DateTime dt = DateTime.Now;//2023-06-30 12:00:00
var OADate = dt.ToOADate();//45107.5
2、OAdate时间转DateTime时间
//把45107.5转换成2023-06-30 12:00:00
var OADate = Math.Round(Convert.ToDouble(45107.5) * 24 * 60 * 60 * 1000);//先转成Timestamp
var stampTime = DateTime.Parse("1899-12-30").ToTimestampLong() + OADate;
var dt = new DateTime(1970, 1, 1, 0, 0, 0, 0);//初始时间
var Time = dt.Ticks + stampTime * 10000;
var DateTime = new DateTime(Convert.ToInt64(Time)).AddHours(8);//存在8小时时区差,需要添加