【问题标题】:Implications in using VB.NET method DateAndTime.DateDiff with C#在 C# 中使用 VB.NET 方法 DateAndTime.DateDiff 的含义
【发布时间】:2025-12-28 20:05:12
【问题描述】:

我正在基于旧版(经典 ASP)构建一个新的 ASP.NET Web 应用程序。 4、5 年前构建此代码的人使用了很多 VBScript 函数,例如 DateDiff。

我目前正在开发一个对日期进行大量计算的模拟器。而且我在这些日期之间得到了令人讨厌的差异,因为我没有像在 VB 6 中那样轻松地在 c# 中获得月份之间的差异。

所以,我从我的 ASP.NET Web 应用程序的 Microsoft.VisualBasic 命名空间中选择使用 DateAndTime.DateDiff 的路径。

你们知道这有什么影响吗?我有点担心这种方法。

干杯,

【问题讨论】:

    标签: asp.net asp-classic vb.net-to-c#


    【解决方案1】:

    唯一的含义是您将另一个程序集添加到您的部署中,并且使用了许多 C# 开发人员(可能需要维护您的代码的其他人)不知道的功能。但我个人认为这并没有太大的问题。 MSDN Library 文档通常很好,如果您想解释为什么使用它,还可以添加一些 cmets。

    编辑:我还想指出,Microsoft.VisualBasic 是从头开始为 .NET 实现的。它不包含古代代码。

    【讨论】:

    • 我们已经取缔了我们商店中的 Microsoft.VisualBasic 库,只是为了强制保留者遵守新的 .Net 库。
    • 该库包含高效有用的代码。它是一个与其他库一样的库,并且比其他任何库都更“受”Visual Basic 启发。既然已经存在,为什么还要构建、测试、维护和版本化您自己的实现?
    • 我也同意 gWiz 今年早些时候的评论;我认为 Microsoft.VisualBasic 命名空间/程序集是一件很棒的事情,它可以帮助简化/加速经典 ASP/VBScript 应用程序到 .NET 的快速迁移/移植,而不必每次遇到它们时都以新的方式重写它们......
    【解决方案2】:

    一种可能性是使用 Itay 指示的 TimeSpan,但除以 30.4375(每月平均天数),忽略小数月份。这对于我目前正在处理的事情来说已经足够接近了,但根据您的需要可能不够准确。例如,2 月 1 日和 3 月 1 日之间的差异为 0,这(基于 30.4375 天的月份定义)是正确的;但是,对于您的特定目的,它可能不正确。

    【讨论】:

      【解决方案3】:

      这是一件好事,因为您不应该使用 VisualBasic 命名空间中的任何类。

      .net 库提供了一个更好的解决方案,称为 TimeSpan,请按以下方式使用它:(dt1 和 dt2 是 DateTimes)

       TimeSpan ts = dt2 - dt1; //Or ts = dt1.Subtract(dt2)
      

      就我想提供的帮助而言,我真的认为快速浏览一下智能就会告诉你剩下的事情(只需在 Visual Studio 中编写,并添加 ts.

      编辑以计算真实月份:(y2 - y1) * 12 + m2 - m1,有什么大不了的?

      【讨论】:

      • 好的,但是如何处理 31 天或 2 月(闰年和闰年)的月份?
      • 是的......这就是我面临的问题......结果有点不同
      • “你不应该使用 VisualBasic 命名空间中的任何类”——为什么不呢?
      • 你不应该使用 VisualBasic 命名空间,因为它已经过时了。如果你的意思是这种月份计数,只需:(y2 - y1) * 12 + m2 - m1
      • 任何人都可以确认或提供有关 Microsoft.VisualBasic 命名空间是否真的被认为过时的参考(链接)吗?这个答案*.com/questions/226517/… 似乎暗示不。(但比这个已经有一年的评论更早,所以它本身可能已经过时了?。)