日期时间偏移不起作用

时间:2018-06-29 12:08:34

标签: c#

我对用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]);

什么是最好的方法?

保罗

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