ASP经典:对两个日期执行相同的减法并在 C# 值中得到相同的值

ASP Classic: perform same subtraction of 2 dates and get the same value in C# value

我正在尝试从经典 ASP 切换到 ASP.Net MVC C#。有一部分我的 ASP Classic 代码将获得一个 DateTime 字段 A 然后将减去一个值 B 并将得到和回答 14322.4290162037 问题是我不知道如何在 C#

中获得相同的答案值
 response.write "A: ==The Value: 19/03/2019 10:17:47==" & rstPASS("DATELASTUSE") & "<br>"
 response.write "B: ==The Value: 01/01/1980 === " & CDate("01/01/1980") & "<br>"
 response.write "A - B: I get: 14322.4290162037 " & rstBROPASS("DATELASTUSE") - CDate("01/01/1980") & "<br>"

我试过的

 idtLastUse = dt.Rows[0]["DATELASTUSE"] - DateTime.ParseExact(s: "01-01-1980", format: "dd/MM/yy", provider: null);

您可以像下面这样减去 2 个日期:

DateTime startTime = DateTime.Now;
DateTime endTime = DateTime.Now.AddDays(5);

TimeSpan span = endTime.Subtract (startTime);
Console.WriteLine( "Time Difference (seconds): " + span.Seconds );
Console.WriteLine( "Time Difference (minutes): " + span.Minutes );
Console.WriteLine( "Time Difference (hours): " + span.Hours );
Console.WriteLine( "Time Difference (days): " + span.Days );

您可以使用:

DateTime d1 = new DateTime(2019, 3, 19, 10, 17, 47);
DateTime d2 = new DateTime(1980, 1, 1, 0, 0, 0);
Console.WriteLine(d1.ToOADate() - d2.ToOADate());

查看 ToOADate 的文档以了解原因。

VB(所有类型)使用 OLE Automation date 格式以数字格式表示日期。

简要说明是;

floating-point number whose integral component is the number of days before or after midnight, 30 December 1899, and whose fractional component represents the time on that day divided by 24.

我们可以用一个简单的例子自己验证这一点;

<%
Call Response.Write(FormatDateTime(CDate(0), vbLongDate))
%>

根据您的区域设置,结果会 return;

30 December 1899

有用的链接

  • Joe's explanation of OLE Automation date
  • (如何使用 ToOADate() 将 .Net DateTime 转换为 OLE 自动化日期格式的示例).