我对用C#处理日期时间跨度不是很熟悉
请在下面查看我的测试
我给它2个日期
然后我想将日期更改为与重播日期相抵消
这很适合第一次约会
但是我的第二个约会没有用,我需要将其设置为13:05,但必须是13:00
var dates = new List<DateTime>()
{
Convert.ToDateTime("29/06/2018 10:00"),
Convert.ToDateTime("29/06/2018 10:05")
};
var replayDate = Convert.ToDateTime("29/06/2018 13:00");
for (var index = 0; index < dates.Count; index++)
{
var date = dates[index];
var time = replayDate.TimeOfDay - date.TimeOfDay;
var newTime = date.Add(time);
dates[index] = newTime;
}
Assert.AreEqual(Convert.ToDateTime("29/06/2018 13:00"), dates[0]);
Assert.AreEqual(Convert.ToDateTime("29/06/2018 13:05"), dates[1]);
什么是最好的方法?
保罗
答案 0 :(得分:2)
也许尝试以下操作:
var dates = new List<DateTime>
{
Convert.ToDateTime("29/06/2018 10:00"),
Convert.ToDateTime("29/06/2018 10:05")
};
var replayDate = Convert.ToDateTime("29/06/2018 13:00");
// process the offset once (before the loop) -- here it will be 3 hours
var offset = replayDate.TimeOfDay - dates[0].TimeOfDay;
for (var index = 0; index < dates.Count; index++)
{
// shift all your dates by that offset
dates[index] = dates[index].Add(offset);
}
Assert.AreEqual(Convert.ToDateTime("29/06/2018 13:00"), dates[0]);
Assert.AreEqual(Convert.ToDateTime("29/06/2018 13:05"), dates[1]);
根据我的评论:
time
应该是replayDate.TimeOfDay - dates[0].TimeOfDay
-您希望偏移量是您的replayDate
和第一个日期之间的差,因此,该值也应该在循环之外(之前) 。
Here是要演示的代码段。
请注意,由于服务器的区域性,我将日期字符串的格式设置为MM/dd/yyyy HH:mm
。