2013-03-25 101 views
1

如果我有一个值D并且希望确保它是类型的日期时间,那么以下是否有区别?Convert.ToDateTime(D)与(DateTime)相比D

  1. DateTime dtm = Convert.ToDateTime(D)
  2. DateTime dtm = (DateTime)D

1是转换,而图2是铸造? (我在某些方面假定2是打火机操作?)
什么时候应该使用1而不是2?


编辑

(问题的上下文中)

d是从在DataTable的细胞。我正在做的是找到任何单元格是日期(通过datatable.columnname),然后将ToOADate函数应用于结果,然后将其移至xl。所以,如果dr是我DataRowView然后我有以下两种备选方案:

//Convert 
DateTime dtm; 
dtm = Convert.ToDateTime(dr[i - 1]); 
xlWorkSheet.Cells[rowCount, i].value = dtm.ToOADate(); 

//Cast 
DateTime dtm; 
dtm = (DateTime)dr[i - 1]; 
xlWorkSheet.Cells[rowCount, i].value = dtm.ToOADate(); 
+3

D是什么类型? – Oded 2013-03-25 14:44:57

+0

@提供了一个很好的问题 - 它是一个DataTable中的单元格 - 在SQL服务器中,提取D的字段是DateTime;我将添加这个(还有一点)到OP – whytheq 2013-03-25 15:10:17

+0

@Oded添加了对问题上下文的小解释 – whytheq 2013-03-25 15:17:12

回答

6

Convert.ToDateTime有几个重载,将其他类型转换为DateTime。它应该用于将不是DateTime的实例转换为DateTime实例。您也可以使用DateTime.ParseDateTime.TryParse(如果您试图解析字符串表示形式)。

(DateTime)D尝试直接将实例投射到DateTime。如果实例在调用之前还不是DateTime,则会抛出异常。

+0

+1听起来像是因为'dr [i - 1]'已经是数据表中的日期时间了,我会尽可能使用快速投射 – whytheq 2013-03-25 20:26:40

1

通过使用“转换”类,您实际上可以在不同类型之间进行转换。例如。您可以将字符串转换为DateTime。 铸造仅适用于相同类型。所以你不能将一个字符串转换成一个Int32,因为这会引发一个转换异常。

关于你的例子: 如果D的内容始终是DateTime类型,那么你应该更喜欢使用它来投射它,因为演员阵容非常快。 如果你不知道D中的类型是什么(可能是因为它是Object类型的),你可能想要转换它,因为这比纯粹的转换更优雅,因为这种方法允许你通过String设置DateTime日期字符串)或Int32(滴答)。

+0

+1感谢此信息Frank – whytheq 2013-03-25 20:21:58