【问题标题】:Replace a Date or Time section in a DateTime object in C#在 C# 中替换 DateTime 对象中的日期或时间部分
【发布时间】:2009-09-11 14:41:09
【问题描述】:

我有一个 DateTime 对象,它可能已经包含也可能不包含某些日期/时间信息。有了这个,我需要用我的新时间替换时间,而与日期无关,反之亦然。我将如何实现这一目标?除了创建两个新的 DateTime 对象外,我看不到任何明显的东西,一个带有旧/新日期,一个带有旧/新时间并连接。肯定有比这更好的方法吗?

【问题讨论】:

    标签: c# datetime


    【解决方案1】:

    我会写两三个扩展方法:

    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】:

      DateTime 是一个不可变的结构。

      唯一的选择是根据您的两个现有值构造一个新的 DateTime 结构。这是最好的方法。幸运的是,这是一个单行:

      DateTime CreateNewDateTime(DateTime date, DateTime time)
      {
           return new DateTime(date.Year, date.Month, date.Day, time.Hour, time.Minute, time.Second);
      }
      

      【讨论】:

        【解决方案3】:

        通过编写 .Date 去除现有日期时间中的时间

        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】:

          这可能不是完全您要查找的内容,但 DateTime 类具有一系列 Add 方法(AddMinutes()、AddDays() 等)。我说这可能不是你要找的,因为它们返回一个 DateTime,所以你必须做类似的事情

          myDate = myDate.AddMinutes(60);
          

          【讨论】:

            猜你喜欢
            • 2011-09-01
            • 1970-01-01
            • 2011-05-05
            • 1970-01-01
            • 2012-12-02
            • 2016-05-11
            • 2016-10-03
            相关资源
            最近更新 更多