【问题标题】:how to combine date and time in c# [duplicate]如何在c#中结合日期和时间[重复]
【发布时间】:2013-11-30 11:05:51
【问题描述】:

我有 2 个值:

var dt1 = dtFromDate.Value;
var tm1 = tmFromTime.Value;


dt1 = 12/5/2013 12:00:00 AM

tm1 = 11/5/2013 9:00:00 AM

我想将日期时间设为:12/5/2013 9:00:00 AM

这怎么可能?

【问题讨论】:

  • 不是一个答案,而是一个提示:用不了多久,您就会意识到 .NET 中的日期和时间处理是一种讽刺。此时,请参阅nodatime.org。
  • 顺便说一句,你不应该调用你的变量dt1 和类似的。 date 会是一个更好的名字。

标签: c# asp.net vb.net


【解决方案1】:

您可以通过访问Date 获取dt1 的日期部分,通过访问TimeOfDay 获取tm1 的时间部分,然后使用+ 将它们组合起来:

dt1.Date + tm1.TimeOfDay

【讨论】:

  • @downvoter 你能解释一下你认为我的回答有什么问题吗?
【解决方案2】:

您可以使用重载的constructor 创建一个新的DateTime:

DateTime dt = new DateTime(
                    dt1.Year, 
                    dt1.Month, 
                    dt1.Day, 
                    tm1.Hour, 
                    tm2.Minute, 
                    tm2.Second,
                    tm2.Millisecond);

【讨论】:

  • 你正在失去 tm2 的毫秒数
  • 正确,我已经更新了我的答案。
【解决方案3】:

您可以使用该代码,使用Date 属性获取日期部分,使用Time 属性获取时间部分:

var dt1 = DateTime.Parse("12/5/2013 12:00:00 AM"); // this is just a sample date
var tm1 = DateTime.Parse("11/5/2013 9:00:00 AM"); // this is just a sample date

var newDate = dt1.Date.Add(tm1.TimeOfDay); // the code to use

【讨论】:

    【解决方案4】:

    DateTime 对象是不可变的,因此为了从一个 DateTime 对象获取日期,但从另一个对象获取时间 - 您必须创建新的 DateTime 对象。 有两种方法:

    使用构造函数重载创建新的 DateTime:

    DateTime date1 = 
        new DateTime(dt1.Year, dt1.Month, dt1.Day, tm1.Hour, tm1.Minute, tm1.Second);
    

    将字符串解析为日期时间:

    var dateToParse = 
          String.Concat(dt1.ToString("yyyy.MM.dd ", CultureInfo.InvariantCulture), 
                        tm1.ToString("HH:mm:ss", CultureInfo.InvariantCulture));
    var date1 = 
          DateTime.ParseExact(dateToParse, "yyyy.MM.dd HH:mm:ss", CultureInfo.InvariantCulture);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-14
      • 1970-01-01
      • 1970-01-01
      • 2013-01-04
      • 1970-01-01
      • 2022-12-10
      相关资源
      最近更新 更多