C# 根据计算改变时间

C# 根据计算改变时间,c#,datetime,C#,Datetime,我想根据计算结果从datetime变量中加/减X小时。我尝试了下面的语法 string lsdt; var hours = (dt1 - dt2).TotalHours; var CalculatedDT = Convert.ToDateTime(lsdt.AddHours(hours)); 这就给了我一个错误 “string”不包含“AddHours”的定义,并且找不到接受“string”类型的第一个参数的扩展方法“AddHours” 从变量lsdt中减去变量hours的正确方法是什么?ls

我想根据计算结果从datetime变量中加/减X小时。我尝试了下面的语法

string lsdt;
var hours = (dt1 - dt2).TotalHours;
var CalculatedDT = Convert.ToDateTime(lsdt.AddHours(hours));
这就给了我一个错误

“string”不包含“AddHours”的定义,并且找不到接受“string”类型的第一个参数的扩展方法“AddHours”

变量
lsdt
中减去变量
hours
的正确方法是什么?

lsdt
不是
DateTime
变量,而是
字符串。因此,您会收到以下错误消息:

“string”不包含“AddHours”的定义,也不包含扩展名 接受类型为“string”的第一个参数的方法“AddHours”可以是 发现

您必须首先将
字符串
转换为
日期时间
结构:

DateTime dt = DateTime.Parse(lsdt);
var hours = (dt1 - dt2).TotalHours;
var CalculatedDT = dt.AddHours(hours);
然后您可以使用
AddHours
方法,该方法可用于
DateTime
结构:

DateTime dt = DateTime.Parse(lsdt);
var hours = (dt1 - dt2).TotalHours;
var CalculatedDT = dt.AddHours(hours);
如Joel Etheron所建议的,为了更安全的方法,您还可以在使用前使用
TryParse
检查解析中
字符串的有效性:

DateTime dt;
bool result = DateTime.TryParse(lsdt, out dt);
if (!result) {
    //Do something, don't continue
}

dt.AddHours()
将为您提供一个dateTime对象,那么您为什么要再次转换为dateTime?对我有效的是var calculatedt=Convert.ToDateTime(lsdt).AddHours(hours);对于异常安全,我建议使用TryParse而不是Parse。@MichaelMormon:是的,其思想是将
字符串
转换为
日期时间
,这样您就可以使用
AddHours
方法,而不是在
字符串中使用它itself@Ian-是的,我意识到在测试了您的代码并意识到可以对变量使用Convert.ToDateTime(),然后添加.AddHours()元素后