c#转换日期为双精度



我在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使用相同的格式将日期表示为双精度类型。

我正好差了3天。这可能是因为我在新西兰的时间是格林尼治时间+ 12。或者可能是因为我用一个double乘以"TicksPerDay",而。net不允许一些奇怪的数字。

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

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

作为Microsoft的程序经理讨论Lotus notes在Excel中的兼容性

在不使用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 

相关内容

  • 没有找到相关文章