将double值转换为c#中的DateTime

本文关键字:中的 DateTime 转换 double | 更新日期: 2023-09-27 18:12:42

我有一个双值
例:

double currentDate = 20161011;  

无法将此双精度值转换为日期格式,如"10/11/2016"

我尝试使用

 DateTime newDate = DateTime.FromOADate(currentDate);

但是它通过一个异常

不是一个合法的日期。

将double值转换为c#中的DateTime

可以将双精度类型转换为字符串,然后调用ParseExact指定格式。

DateTime newDate = DateTime.ParseExact(currentDate.ToString(), "yyyyMMdd", null);

但是你真的应该尽量避免这种情况,并从一开始就将日期存储在DateTime变量中

OADate是自30 Dec 1899以来的天数:

https://msdn.microsoft.com/en-us/library/system.datetime.fromoadate (v = vs.110) . aspx

因此,20161011被视为OLE自动化日期时对应于57098年(并且您有一个错误)。以正确的方式转换您的值,即转换为11 Oct 2016:

double currentDate = 20161011;  
int v = (int) (currentDate + 0.5);
DateTime result = new DateTime(v / 10000, (v / 100) % 100, v % 100);

OLE自动化日期不是这样的,它是一个(大致)表示自1900年1月1日以来的天数的系统。

如果我必须做那个难看的转换,我会这样做:

double currentDate = 20161011;
int intCurrentDate = (int)currentDate;
DateTime newDate = new DateTime(intCurrentDate / 10000, intCurrentDate / 100 % 100, intCurrentDate % 100);