代码之家  ›  专栏  ›  技术社区  ›  Chris Barry

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

  •  0
  • Chris Barry  · 技术社区  · 15 年前

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

    假设我有一个datetime为的项目

    01/01/2000 00:00:00

    我把它改成

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

    4 回复  |  直到 15 年前
        1
  •  3
  •   Mark Avenius    15 年前

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

    也就是说,有了以下几点,你就不必担心正面或负面的变化了:

            DateTime[] dateTimeArray = {DateTime.Now};
            foreach (DateTime dateTime in dateTimeArray)
            {
                dateTime.Add(timeSpan);
            }
    
        2
  •  1
  •   Albin Sunnanbo    15 年前

    DateTime 对象。

    DateTime d1 = DateTime.Now;
    d1 = d1.AddDays(1).AddHours(6);
    
        3
  •  1
  •   default locale    15 年前

    TimeSpan类有什么问题?

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

    Timespan类不使用负时间间隔。试着检查一下。

    DateTime start = new DateTime(2010, 10, 26);
    DateTime finish = new DateTime(2010, 10, 20);
    TimeSpan diff = finish - start;
    DateTime value = new DateTime(2010, 11, 1);
    value += diff;
    Console.WriteLine(diff);
    Console.WriteLine(value.ToString("dd.M.yyyy"));
    

    输出:

    -6.00:00:00
    26.10.2010
    
        4
  •  0
  •   Sascha    15 年前

    您可以使用LINQ和单行程序来实现这一点:

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

    如果这比foreach循环更具可读性,那么foreach循环将由您自己决定。

    推荐文章