gpt4 book ai didi

c# - 将 TimeSpan 数据类型转换为 DateTime?

转载 作者:太空狗 更新时间:2023-10-29 19:59:15 26 4
gpt4 key购买 nike

我正在使用 C# 3.5 将小型 MSAccess 应用程序转换为基于 Web 的 ASP.NET 应用程序。在将部分 VBA 代码转换为 C# 时,我想知道在 C# 中处理日期的最佳方式是什么。

这是一个 VBA 代码示例:

Coverage1=IIf(IsNull([EffDate1]),0,IIf([CurrDate]<=[EndDate1],[CurrDate]-[EffDate1],[EndDate1]-[EffDate1]+1))

这是我当前的 C# 代码的样子,其中包含注释代码中指出的错误:

    public DateTime CalculateCoverageOne(DateTime dateEffDateOne, DateTime dateCurrentDate, DateTime dateEndDateOne) 
{
if (dateCurrentDate.Date <= dateEndDateOne.Date)
{
return null; //Get "cannot convert null to System.DateTime because it is a non-nullable value type" error
}
else
{
if (dateCurrentDate.Date <= dateEndDateOne)
{
return dateCurrentDate.Subtract(dateEffDateOne); //Gets error "cannot implicitly convert system.timepsan to system.datetime
}
else
{
return dateEndDateOne.Subtract(dateEffDateOne.AddDays(1)); //Gets error "cannot implicitly convert system.timepsan to system.datetime
}
}
}

最佳答案

无法将 null 转换为 System.DateTime,因为它是不可为 null 的值类型“错误

DateTime 类型是值类型,这意味着它不能包含空值。要解决这个问题,您可以做以下两件事之一;返回 DateTime.MinValue,并在您想要使用该值时对其进行测试,或者更改函数以返回 DateTime?(注意问号),这是一个可为空的 DateTime。可为空的日期可以这样使用:

DateTime? nullable = DateTime.Now;
if (nullable.HasValue)
{
// do something with nullable.Value
}

无法将 system.timepsan 隐式转换为 system.datetime

当您从另一个 DateTime 中减去一个 DateTime 时,结果是 TimeSpan ,代表他们之间的时间量。 TimeSpan 不代表特定的时间点,而是跨度本身。为了获取日期,您可以使用 Add方法或 Subtract接受 TimeSpanDateTime 对象的方法重载。我不能说具体应该是什么样子,因为我不知道代码中的不同日期代表什么。

在最后一种情况下,您可以简单地使用 AddDays 方法的返回值,但使用负值(为了减去一天,而不是加一天):

return dateEffDateOne.AddDays(-1);

关于c# - 将 TimeSpan 数据类型转换为 DateTime?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1161807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com