在C#中将日期和时间加入日期时间

Mik*_*lls 54 c# datetime

我正在从iSeries中检索数据,其中有一个单独的日期和时间字段.我想将它们加入到我的C#项目的DateTime字段中.我没有看到为DateTime字段添加时间的方法.你会怎么建议完成这个?

Dav*_*d M 89

你可以很容易地做到这一点:

DateTime dateOnly;
DateTime timeOnly;
...
DateTime combined = dateOnly.Date.Add(timeOnly.TimeOfDay);
Run Code Online (Sandbox Code Playgroud)

TimeOfDay返回a TimeSpan,然后将其添加到日期.

编辑(感谢下面的评论者) - 为了安全起见,请使用dateOnly.Date以确保仅限日期部分.

  • 这里的观众需要注意的是,你必须确保`DateTime dateOnly`只包含一个日期,其中一个足够大的TimeSpan,当你预先形成`Add`时,你会把这一天增加1! (5认同)
  • @CodeBlend是正确的,这发生在我身上.覆盖自己的最好方法是:`DateTime combined = dateOnly.Date.Add(timeOnly.TimeOfDay);` (5认同)
  • 好抓,@ RodolfoDeLosSantos!我发送了一个更新解决方案的请求以符合您的建议. (2认同)
  • 解决方案相应编辑 谢谢. (2认同)

Ada*_*son 67

它们是如何存储的?假设日期部分存储为相关日期DateTime的午夜时间且时间为a TimeSpan,则可以添加它们.

DateTime date = ...;
TimeSpan time = ...;

DateTime result = date + time;
Run Code Online (Sandbox Code Playgroud)

  • 这只有在日期变量的时间部分为00:00:00时才有效,否则时间变量将在日期之前添加,这将是意外的结果. (3认同)
  • @batmaci是的,这在答案中有具体说明. (2认同)

Ree*_*sey 8

您可以从"时间"字段轻松构建TimeSpan.

一旦你有了,那就做:

TimeSpan time = GetTimeFieldData();
dateField = dateField.Add(time);
Run Code Online (Sandbox Code Playgroud)


小智 5

Datetime date = new DateTime(Date1.Year, Date1.Month, Date1.Day, Time1.Hour, Time1.Minute, Time1.Second); 
Run Code Online (Sandbox Code Playgroud)


Shi*_*mmy 5

我的答案涉及连接.NET 6DateOnly和中的两个对象:TimeOnly

DateOnly orderDate = ...
TimeOnly orderTime = ...
DateTime orderDateTime = orderDate.ToDateTime(orderTime);
Run Code Online (Sandbox Code Playgroud)