【问题标题】:Combine two datetime variables into one (up to seconds precision)将两个日期时间变量合二为一(精确到秒)
【发布时间】:2012-02-15 13:36:01
【问题描述】:

我有一个似乎无法解决的小问题。我有两个日期时间变量,一个中的重要数据是年、月和日。另一个 datetime 变量存储小时、分钟和秒。

造成这种混乱的原因是我从中提取数据的数据库,它们有两个不同的列来存储实际日期和时间。代码如下:

DateTime date = Convert.ToDateTime(dTable.Rows[i][0]);
DateTime time = Convert.ToDateTime(dTable.Rows[i][1]);

DateTime newDateTime = new DateTime();

newDateTime 需要设置完整的日期时间,其中日期分数在日期变量中,时间分数在时间变量中。

【问题讨论】:

标签: c# datetime


【解决方案1】:

应该这样做:

newDateTime = date.Date + time.TimeOfDay;

【讨论】:

  • 这是保持毫秒精度的正确答案。
【解决方案2】:

使用this constructor:

DateTime newDateTime = new DateTime(date.Year, date.Month, date.Day, 
                                    time.Hour, time.Minute, time.Second);

【讨论】:

  • 您正在失去毫秒精度,例如。 time = TimeSpan.FromMilliseconds(0.5)
  • @malat OP 指定“另一个日期时间变量存储小时、分钟和秒。”所以什么都没有丢失。
【解决方案3】:
DateTime newDateTime = date.Date.Add(time.Time);

Date 属性不包括任何时间组件(实际上是指定日期的午夜),Time 属性仅将时间组件返回为 TimeSpan

这里我们使用date 变量的日期部分来获取午夜,并将time 变量的时间部分添加到它上面,以获得正确的日期和时间。

【讨论】:

    【解决方案4】:

    你可以在下面做这样的事情

        TimeSpan timeSpan = time.TimeOfDay;
            string s = string.Format("{0} {1}", date.Date.ToString("MM dd yyyy"), time.ToString());
            DateTime combinedDateTime = DateTime.Parse(s);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-18
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多