将double值转换为c#中的DateTime
本文关键字:中的 DateTime 转换 double | 更新日期: 2023-09-27 18:12:42
我有一个双值
例:
double currentDate = 20161011;
无法将此双精度值转换为日期格式,如"10/11/2016"
我尝试使用
DateTime newDate = DateTime.FromOADate(currentDate);
但是它通过一个异常
不是一个合法的日期。
可以将双精度类型转换为字符串,然后调用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);