繁体   English   中英

C#将日期转换为双精度

[英]C# Convert Date To Double

我已经在VBA中编写了一个函数,该函数从文件的属性创建代码。 我需要开发人员最后在C#中执行相同的操作。

开发人员说不可能在c#中做同样的事情。

因此,在VBA中,我过程的一部分是将日期转换为双精度。 VBA这样做的方法是基本上计算给定日期与1900年1月1日之间的天数。因此2014年3月19日将是41,717的两倍。

我要怎么说用C#(不是我熟悉的语言)编写一个函数,它将日期数据类型转换为自1900年1月1日以来已经过的天数?

任何帮助,将不胜感激。

将两个DateTime相减得到一个TimeSpan 您可以使用TimeSpan.TotalDays来获取两个日期之间的天数:

double days = (DateTime.Today - new DateTime(1900,1,1)).TotalDays;

如果DateTime具有时间分量,则将其表示为一天的一部分,因此例如:

 // current date and time (16:24:15)
 (new DateTime(2014, 3, 18, 16, 24, 15) - new DateTime(1900,1,1)).TotalDays

会给你41714.6835069444

请注意,结果与在VBA中使用CDbl()有2天的差异,因为VBA中的日期由自12/30/1899以来的天数而不是1/1/1900表示。

使用.net DateTime方法ToOADate()将返回一个表示OLE自动化日期精度VBA使用此相同格式将一个日期表示为double型

我刚好相差3天。 这可能是因为我在格林尼治标准时间+ 12时在新西兰。或者可能是因为我用“ TicksPerDay”乘以一个双精度数,而.Net不允许使用一些奇怪的数字。

DateTime.FromOADate(vbaTime)是我在MS Access和C#之间移动日期的理想解决方案。

顺便说一句,我怀疑这是Joel Spolsky提到的“日期计算问题”的结果: http : //www.joelonsoftware.com/items/2006/06/16.html

在Microsoft中作为程序管理器讨论Excel中的Lotus Notes兼容性时。

不使用OLE自动化怎么办:

'get time elapsed since some earlier point in time, such as midnight today
Dim tim As TimeSpan = Now.Subtract(Today)

'calc the time elapsed in fractional seconds
'note that tim.Seconds only provides whole seconds, so add tim.Milliseconds
Dim tsec As Double = tim.Hours * 3600 + tim.Minutes * 60 + tim.Seconds + tim.Milliseconds / 1000 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM