我有两个DateTime
个对象。 FetchTime
包含时间hh:mm:ss
我对此感兴趣,FetchDate
包含日期:年,月,日。
示例:
Debug.WriteLine("Time " + FetchTime);
Debug.WriteLine("Date " + FetchDate);
显示例如:
Time 2014-09-10 23:04:00
Date 2014-09-15 00:00:00
我希望得到DateTime
看起来像这样的对象:
2014-09-15 23:04:00
我想将这两者合并为一个或修改其中一个。我认为这很容易,但我几乎看不到任何DateTime
对象的方法。是可以实现还是首先我必须将DateTime
转换为另一种类型然后将其转换回来?最后,我必须拥有DateTime
对象,因为它将被添加到SQL数据库中。
修改
我指的是可空的DateTime
:DateTime? FetchDate, DateTime? FetchTime
。
答案 0 :(得分:3)
var date = new DateTime(FetchDate.Year, FetchDate.Month, FetchDate.Day,
FetchTime.Hour, FetchTime.Minute, FetchTime.Second);
更新:您似乎正在使用可空DateTime
。因此,您应该使用DateTime
属性获取基础Value
值。
var fetchDate = FetchDate.Value;
var fetchTime = FetchTime.Value;
var date = new DateTime(fetchDate.Year, fetchDate.Month, fetchDate.Day,
fetchTime.Hour, fetchTime.Minute, fetchTime.Second);
答案 1 :(得分:3)
每当您在值类型上使用?
后缀时,您始终需要先致电.Value
成员,然后才能调用此类型的任何成员。
?
后缀实际上是编译器将您的类型引用从T?
转换为Nullable<T>
的特殊符号。有关其他详细信息,请参阅Nullable`1的MSDN文档。
对于您的示例,您将需要使用以下内容将值合并在一起。
new DateTime(
FetchDate.Value.Year,
FetchDate.Value.Month,
FetchDate.Value.Day,
FetchTime.Value.Hour,
FetchTime.Value.Minutes,
FetchTime.Value.Seconds)
如果您担心空值,请务必使用== null
或.HasValue
检查空值,否则您会遇到System.InvalidOperationException
。
答案 2 :(得分:2)
为了好玩,这是另一种可能的方式:
DateTime date = new DateTime(2014, 9, 15);
DateTime datetime = new DateTime(2014, 9, 10, 23, 4, 0);
DateTime combined = date + datetime.TimeOfDay;