C#将日期转换为双倍

时间:2014-03-18 20:20:48

标签: c# vba datetime type-conversion

我在VBA中编写了一个函数,它根据文件的属性创建代码。 我需要开发人员在C#中做同样的事情。

开发人员说在c#中不可能这样做。

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

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

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:4)

减去两个DateTime s会为您提供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中的日期由自18/30/1899而不是1/1/1900以来的天数表示。

答案 1 :(得分:1)

使用.net DateTime方法ToOADate()返回double representing the OLE Automation date VBA使用此same format to representa a date as a double

答案 2 :(得分:0)

我差不多3天了。这可能是因为我在GMT + 12时在新西兰。 或者可能是因为我将双倍乘以“TicksPerDay”而.Net不允许一些奇怪的数字。

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

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

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

答案 3 :(得分:0)

在不使用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 
相关问题