【问题标题】:C# Convert Date To DoubleC# 将日期转换为双精度
【发布时间】:2014-04-24 18:31:10
【问题描述】:

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

开发人员说在 c# 中不可能做到这一点。

所以在 VBA 中,我的部分过程是将日期转换为双精度。 VBA 执行此操作的方式基本上是计算给定日期与 1900 年 1 月 1 日之间的天数。因此 2014 年 3 月 19 日将是 41,717 的双精度值。

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

任何帮助将不胜感激。

【问题讨论】:

  • 如果您使用 VBA,您实际上可能正在寻找 DateTime.ToOADate 函数,记录在这里:msdn.microsoft.com/EN-US/library/x2k67kb6(v=VS.110,d=hv.2).aspx
  • @Mark ToOADate 接近,但与自 1900 年 1 月 1 日以来的天数略有不同(准确地说是 2 天)。
  • @DStanley 我认为他正在寻找 OADate 而不是他所描述的功能的原因是因为他给出的示例输入/输出适合 OADate,但不适合他的描述。跨度>

标签: c# vba datetime type-conversion


【解决方案1】:

减去两个DateTimes 得到一个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 中的日期表示为自 1899 年 12 月 30 日以来的天数,而不是 1900 年 1 月 1 日。

【讨论】:

  • 我同意 D Stanley 的观点。 The base OLE Automation Date is midnight, 30 December 1899.
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

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

    作为 Microsoft 的项目经理讨论 Lotus notes 在 Excel 中的兼容性时。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-18
        • 2017-09-30
        • 1970-01-01
        • 1970-01-01
        • 2020-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多