2017-03-09 79 views
0

正如我上面的标题,我在我的数据库中得到了一个表,它是DateTime数据类型,它是空值。而我得到了这条线,我使用的代码,但我不知道为什么它返回12:00DateTime null in database

string FitaCorIn1 = Convert.ToDateTime(req.FACorrectionIn1).ToString("hh:mm") == null ? "00:00" : Convert.ToDateTime(req.FAIn1).ToString("hh:mm"); 
string FitaCorOut1 = Convert.ToDateTime(req.FACorrectionOut1).ToString("hh:mm") == null ? "00:00" : Convert.ToDateTime(req.FAIn1).ToString("hh:mm"); 

所以你可以在我的代码中看到如果日期时间的值为null我想显示00:00如果不为空,它将显示当前值。

注意

12小时制

+0

什么是'req.FACorrectionIn1'是从数据库中的值? –

+0

@ un-lucky它们在数据库中都是空的 – KiRa

+1

看起来它正在返回“12:00”,因为“ToString”方法返回“12:00”。将其与空比较不是评估为TRUE。也许你不想比较'ToString'的返回值为null。也许你甚至不需要调用'ToDateTime'方法。也许你只是想检查'FACorrectionIn1'成员是否为空。 – spencer7593

回答

0

您应该使用HH:mm格式。

Convert.ToDateTime(req.FAIn1).ToString("HH:mm"); 
+1

OP想要12小时格式不是24小时 – Nkosi

+0

'HH'是24小时制吗? – KiRa

1

你应该检查空转换之前,否则你可能会得到转换方法例外。 (根据评论)看起来FACorrectionIn1是DateTime类型,如果是这样的话,你必须检查它们是否与DateTime.MinValue比较,如果它是可以为空的DateTime,你也可以检查null。

为什么你越来越12:00即使在数据库中的值是 空

同样的原因FACorrectionIn1是一个DateTime对象,所以它不会为空,这样检查空的条件由于其默认值为01/01/0001 00:00:00,因此变为虚假。所以当你使用.ToString("hh:mm")格式化他们时,你会得到12:00。所以,你必须这样做:

string FitaCorIn1 = req.FACorrectionIn1 == DateTime.MinValue ? "00:00" : 
              Convert.ToDateTime(req.FAIn1).ToString("hh:mm"); 

如果您使用解析而不是为Convert.To..

+0

DbNull是什么意思? – KiRa

+0

@KiRa:关键字null表示无效的引用。 System.DbNull类表示数据库字段中不存在的值,请参见[this](http://stackoverflow.com/questions/4958379/what-is-the-difference-between-null-and-system-dbnull-value )关于差异的更多信息 –

+0

如果我使用你的方法,我得到一个错误。运算符'=='不能应用于'System.DateTime'和System.DBNull类型的操作数。如果我使用单个'=',我也得到一个错误,不能将Implicit类型的'System.DBNull'转换为bool。 – KiRa

0

这将是巨大的我得到了它现在..感谢spencer7593。这是我的代码看起来像现在。

string FitaCorIn1 = req.FACorrectionIn1 == null ? "00:00" : Convert.ToDateTime(req.FACorrectionIn1).ToString("hh:mm"); 
string FitaCorOut1 = req.FACorrectionOut1 == null ? "00:00" : Convert.ToDateTime(req.FACorrectionOut1).ToString("hh:mm"); 
+1

这些属性似乎已经是日期时间,所以不需要转换它们。 DateTime也不能为null,所以condition语句总是会去else语句。 – Nkosi