在c#中将double值转换为DateTime

时间:2016-10-11 21:26:01

标签: c# datetime

我有双倍价值  例如:

double currentDate = 20161011;  

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

我尝试使用

 DateTime newDate = DateTime.FromOADate(currentDate);

但通过例外

  

不是合法的OleAut日期。

3 个答案:

答案 0 :(得分:7)

您可以将double转换为字符串,然后调用ParseExact指定格式。

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

但实际上你应该尝试避免这种情况,并从头开始在DateTime变量中存储日期。

答案 1 :(得分:2)

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);

答案 2 :(得分:0)

OLE自动化日期不是这样的,它是一个(粗略地)表示自19/1/19以来的日子的系统。

如果我不得不做那种难看的转换,我会这样做:

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