30

我有我TimeSpan的特定原因,所以它必须采用这种格式。我正在尝试在当前时间上增加一个小时。这是我得到的,它不起作用:

TimeSpan time1= TimeSpan.FromHours(1); // my attempt to add 2 hours
TimeSpan ts = DateTime.Now.TimeOfDay;
ts.Add(time1);
MessageBox.Show(ts.ToString()); // for showing me its result

你能给些建议么?

4

9 回答 9

27
ts += TimeSpan.FromHours(1);

你有它!

于 2016-06-24T13:08:29.933 回答
26

的方法Add不是TimeSpan修改 的值ts。它正在对值求和并返回一个新对象。

因此,您应该这样做:

 TimeSpan ts = DateTime.Now.TimeOfDay;
 var ts2 = ts.Add(time1);
 MessageBox.Show(ts2.ToString());
于 2013-09-11T16:36:52.090 回答
20

您的代码不起作用的原因TimeSpan是不可变的。该TimeSpan.Add方法返回一个新对象:

ts = ts.Add(time1);
于 2013-09-11T16:37:13.433 回答
5

使用 AddHours();

DateTime.Now.AddHours(1);

或者,使用您的代码(请参阅newTs变量)..

TimeSpan time1 = TimeSpan.FromHours(1); // my attempt to add 2 hours
TimeSpan ts = DateTime.Now.TimeOfDay;
var newTs = ts.Add(time1);
MessageBox.Show(newTs.ToString());

另外,您的评论说“我尝试增加 2 小时”,这是拼写错误吗?

于 2013-09-11T16:36:56.237 回答
4

我的 2 美分:问题标题说 - 如何在时间跨度上增加一个小时。C#,只有一个答案是准确的。这是我对时间跨度增加小时数的看法:

public static TimeSpan AddHours(TimeSpan timeSpan, int hoursToAdd)
{
   TimeSpan newSpan = new TimeSpan(0, hoursToAdd, 0, 0);
   return timeSpan.Add(newSpan);
}

这是演示的小提琴:https ://dotnetfiddle.net/iuh66s

于 2016-03-02T02:55:37.147 回答
3
var newDateTime = DateTime.Now.AddHours(1);

无需创建TimeSpan. 这将延续到明天。

于 2013-09-11T16:35:21.570 回答
2

尝试使用这个: -

TimeSpan time1 = TimeSpan.FromHours(1); // my attempt to add 2 hours
TimeSpan ts = DateTime.Now.TimeOfDay;
var newts = ts.Add(time1);
MessageBox.Show(newts.ToString());

试试这个:-

var newDateTime = DateTime.Now.AddHours(1);
于 2013-09-11T16:35:47.757 回答
1
var newTime = oldTime.Add(new TimeSpan(1, 0, 0));

不要陷入不将值分配给任何东西(即newTime)的常见错误,因为oldTime它将保持不变 -TimeSpan.Add(...)返回TimeSpan

同样适用String.Replace(...)- 容易,但毁灭性的,错过。

于 2013-09-11T16:45:06.350 回答
0

如果您需要添加分钟时间并且时间是可变的而不是恒定的

TimeSpan firstTime = TimeSpan.Parse(firstTime);
TimeSpan NeededTimeForAdd= TimeSpan.FromMinutes(SessionMinutes);    
TimeSpan ExpectedTime = firstTime.Add(NeededTime);
于 2021-09-04T08:47:07.167 回答