代码之家  ›  专栏  ›  技术社区  ›  Ryall

替换C中日期时间对象中的日期或时间节#

  •  11
  • Ryall  · 技术社区  · 17 年前

    我有一个日期时间对象,该对象可能包含,也可能不包含某些日期/时间信息。因此,我需要将时间替换为与日期无关的新时间,反之亦然。我怎样才能做到这一点?除了创建两个新的日期时间对象之外,我看不到任何明显的东西,一个对象具有旧/新日期,另一个对象具有旧/新时间并进行连接。肯定有比这更好的方法吗?

    4 回复  |  直到 16 年前
        1
  •  12
  •   Jon Skeet    17 年前

    我会写两个或三个扩展方法:

    public static DateTime WithTime(this DateTime date, TimeSpan time)
    {
        return date.Date + time;
    }
    
    public static DateTime WithDate(this DateTime original, DateTime newDate)
    {
        return newDate.WithTime(original);
    }
    
    public static DateTime WithTime(this DateTime original, DateTime newTime)
    {
        return original.Date + newTime.TimeOfDay;
    }
    

    (您确实不需要这两个方法,但有时,如果将大量调用链接在一起,可能会更简单。)

    注意,您没有创建任何 物体 就堆中的项而言,如 DateTime 是一个结构。

        2
  •  12
  •   Reed Copsey    17 年前

    日期时间是不可变的结构。

    唯一的选择是基于两个现有值构造一个新的datetime结构。这是最好的方法。幸运的是,它是一条单行线:

    DateTime CreateNewDateTime(DateTime date, DateTime time)
    {
         return new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second);
    }
    
        3
  •  1
  •   Charles Bretana    17 年前

    通过写入从现有日期时间中除去时间。日期

    DateTime new = oldDate.Date;
    

    通过单独添加小时、分钟和秒来添加时间

    DateTime new = oldDate.Date.AddHours(14).AddMinutes(12).AddSeconds(33);
    

    或者一下子

    DateTime new = oldDate.Date.AddSeconds(51153);
    

    或者通过添加TimeSpan()。

    DateTime new = oldDate.Date.Add(new TimeSpan(14,12,33));
    
        4
  •  0
  •   oltman    17 年前

    这可能不是 确切地 您正在查找的内容,但是datetime类有一系列的add方法(addminutes()、adddays()等)。我说这可能不是你想要的,因为这些返回一个日期时间,所以你必须做一些类似的事情

    myDate = myDate.AddMinutes(60);