如何在C#中处理来自数据库的DateTime值

时间:2018-02-22 21:32:36

标签: c# datetime

我在C#应用程序中处理DateTime数据时有一种奇怪的情况,需要正确地重构我的代码。代码如下:

DateTime start = new DateTime(); 
DateTime end = new DateTime();
String inDate = "";
String outDate = "";
String inTime = "";
String outTime = ""; 


inDate = DataObject.InDate();
outDate = DataObject.OutDate();
inTime = DataObject.InTime();
outTime = DataObject.OutTime();

//I have check for null as the database may return null values
if (!String.IsNullOrEmpty(inDate) && !String.IsNullOrEmpty(inTime))
    {
          scheduleStart = DateTime.Parse(Convert.ToDateTime(inDate).ToShortDateString() + " " + clockInTime);
    }
    if (!String.IsNullOrEmpty(outDate) && !String.IsNullOrEmpty(outTime))
    {
          scheduleEnd = DateTime.Parse(Convert.ToDateTime(outDate).ToShortDateString() + " " + outTime);
    }
    if (start != null && end != null)
    {
          TimeSpan span = end.Subtract(start);
    }

这一行if (start != null && end != null)抱怨说它永远都是真的。我想过去除scheduleStartend变量的初始化。现在,if (start != null && end != null)行抱怨使用未初始化的变量。我考虑过对DateTime?start变量使用end。现在,我得到的错误是,DateTime?没有Subtract()的定义。不幸的是我必须使用这种方法。那么,解决此问题和重构此代码的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

scheduleStart.Value.Subtract确实存在。或者,如果您已完成DateTime检查,则可以转为null

答案 1 :(得分:0)

使用DateTime?作为开头和结尾,然后在您知道.Value时使用null

DateTime? scheduleStart = null;
DateTime? scheduleEnd = null;


    if (scheduleStart != null && scheduleEnd != null)
    {
          TimeSpan span = scheduleEnd.Value.Subtract(scheduleStart.Value);
    }