将todatetime (D)转换为(DateTime)D

本文关键字:DateTime 转换 todatetime | 更新日期: 2023-09-27 18:05:37

如果我有一个值D并希望确保它是datetime类型,那么以下之间是否存在差异?

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

1是转换,而2是强制转换?(我认为在某些方面2是一个操作?)
什么时候我应该用1而不是2?


编辑

(上下文)

D来自DataTable中的cell。我正在做的是找到日期的任何单元格(通过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();

将todatetime (D)转换为(DateTime)D

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

(DateTime)D尝试直接将实例强制转换为DateTime。如果在调用之前实例还不是DateTime,则会抛出异常。

通过使用"Convert"类,您实际上可以在不同类型之间进行转换。例如,你可以将字符串转换为日期时间。强制转换只适用于相同的类型。因此,不能将String类型强制转换为Int32类型,因为这会引发强制转换异常。

关于你的例子:如果D的内容总是DateTime类型,那么您应该选择强制转换,因为强制转换非常快。如果你不知道D中的类型是什么(可能是因为它是Object类型),你可能希望转换它,因为这比普通的类型转换更优雅,因为这个方法允许你通过String (Date String)或Int32 (ticks)设置DateTime。