我有双倍价值 例如:
double currentDate = 20161011;
无法将此双倍值转换为日期格式,例如" 10/11/2016"
我尝试使用
DateTime newDate = DateTime.FromOADate(currentDate);
但通过例外
不是合法的OleAut日期。
答案 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);