C# 如何将DateTime中的差异应用于c中的DateTime对象列表#

C# 如何将DateTime中的差异应用于c中的DateTime对象列表#,c#,.net,datetime,C#,.net,Datetime,我有一些代码,可以检测对象的属性何时发生更改,这些对象将被持久化到数据库中。检测发生在它们被保存回数据库之前 我想知道将更改及时应用于一整套相关日志项的最佳方法 假设我有一个日期时间为的项目 2000年1月1日00:00:00 我把它改成 2000年1月2日06:00:00 我知道我需要将每个日志项向前移动1天6小时。我应该手动编写代码来处理所有这些问题,还是.net为我提供了一些平滑的处理方法。DateTimeOffset听起来是个不错的主意,但我不认为它用于此 如果我自己构建这个,我可能会计

我有一些代码,可以检测对象的属性何时发生更改,这些对象将被持久化到数据库中。检测发生在它们被保存回数据库之前

我想知道将更改及时应用于一整套相关日志项的最佳方法

假设我有一个日期时间为的项目

2000年1月1日00:00:00

我把它改成

2000年1月2日06:00:00

我知道我需要将每个日志项向前移动1天6小时。我应该手动编写代码来处理所有这些问题,还是.net为我提供了一些平滑的处理方法。DateTimeOffset听起来是个不错的主意,但我不认为它用于此


如果我自己构建这个,我可能会计算一个时间跨度,如果这个跨度应该从日期时间中加上或减去。但是有更好的方法吗?

只需在
DateTime
对象上使用Add*方法即可

DateTime d1 = DateTime.Now;
d1 = d1.AddDays(1).AddHours(6);

只需在
DateTime
对象上使用Add*方法

DateTime d1 = DateTime.Now;
d1 = d1.AddDays(1).AddHours(6);

TimeSpan类有什么问题

TimeSpan timeSpan = finishDate - startDate;
for (int index = 0; index < dateList.Count; index++)
    {
        dateList[index] = dateList[index] + timeSpan;
    }
输出:

-6.00:00:00
26.10.2010

TimeSpan类有什么问题

TimeSpan timeSpan = finishDate - startDate;
for (int index = 0; index < dateList.Count; index++)
    {
        dateList[index] = dateList[index] + timeSpan;
    }
输出:

-6.00:00:00
26.10.2010

TimeSpan会为你工作,是的,它会记录积极和消极的方面。TimeSpan上的Duration()方法将返回一个新的TimeSpan,该TimeSpan具有原始值的绝对值(即正变化)

也就是说,通过以下几点,您不必担心正面或负面的变化:

        DateTime[] dateTimeArray = {DateTime.Now};
        foreach (DateTime dateTime in dateTimeArray)
        {
            dateTime.Add(timeSpan);
        }

TimeSpan会为你工作,是的,它会记录积极和消极的方面。TimeSpan上的Duration()方法将返回一个新的TimeSpan,该TimeSpan具有原始值的绝对值(即正变化)

也就是说,通过以下几点,您不必担心正面或负面的变化:

        DateTime[] dateTimeArray = {DateTime.Now};
        foreach (DateTime dateTime in dateTimeArray)
        {
            dateTime.Add(timeSpan);
        }

您可以使用LINQ和单行程序执行此操作:

datetimes = datetimes.Select ( itm => itm.AddDays ( 1 ).AddHours ( 6 ) ).ToArray ();

如果这比foreach循环更具可读性,则留给您自己决定。

您可以使用LINQ使用单行程序执行此操作:

datetimes = datetimes.Select ( itm => itm.AddDays ( 1 ).AddHours ( 6 ) ).ToArray ();

如果这比foreach循环更具可读性,则留给您自己决定。

没关系,但如果时间倒流了呢?时间跨度的数字为正,但应为负。我想知道我是否应该有自己的变量来表示add/substract。如果是减法,则值会翻转。d1.增加天数(-1)。增加小时(-6);是的,只是“添加”负值。这很好,但是如果时间向后移动呢?时间跨度的数字为正,但应为负。我想知道我是否应该有自己的变量来表示add/substract。如果是减法,则值会翻转。d1.增加天数(-1)。增加小时(-6);是的,只是“添加”负值。timespan是否记录时间跨度是向前还是向后?是的,timespan类实现负时间间隔。您可以很容易地检查它。timespan是否记录时间跨度是向前还是向后?是的,timespan类实现负时间间隔。你可以很容易地检查它。