如何将两个可以为空的DateTime对象合并到一个对象时间我需要的另一个日期到一个对象?

时间:2014-09-10 19:05:00

标签: c# datetime

我有两个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数据库中。

修改

我指的是可空的DateTimeDateTime? FetchDate, DateTime? FetchTime

enter image description here

3 个答案:

答案 0 :(得分:3)

只需使用DateTime constructor

即可
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;