我想转换日期时间? todatetime但是我得到了这个错误:
错误7无法隐式转换类型'System.DateTime?'至 'System.DateTime的'。存在显式转换
这是我的代码:
public string ConvertToPersianToShow(DateTime? datetime)
{
DateTime dt;
string date;
dt = datetime;
string year = Convert.ToString(persian_date.GetYear(dt));
string month = Convert.ToString(persian_date.GetMonth(dt));
string day = Convert.ToString(persian_date.GetDayOfMonth(dt));
if (month.Length == 1)
{
month = "0" + Convert.ToString(persian_date.GetMonth(dt));
}
if (day.Length == 1)
{
day = "0" + Convert.ToString(persian_date.GetDayOfMonth(dt));
}
//date = Convert.ToString(persian_date.GetYear(dt)) + "/" +
Convert.ToString(persian_date.GetMonth(dt)) + "/" +
//Convert.ToString(persian_date.GetDayOfMonth(dt));
date = year + "/" + month + "/" + day+"("+dt.Hour+":"+dt.Minute+")";
return date;
}
答案 0 :(得分:40)
您有3个选项:
1)获取默认值
dt = datetime??DateTime.Now;
如果DateTime.Now
为空,它将指定datetime
(或您想要的任何其他值)
2)检查datetime是否包含值,如果不是则返回空字符串
if(!datetime.HasValue) return "";
dt = datetime.Value;
3)将方法的签名更改为
public string ConvertToPersianToShow(DateTime datetime)
全部是因为DateTime?
意味着它可以为DateTime
,所以在将其分配给DateTime
之前,您需要检查它是否包含值,然后再分配。
答案 1 :(得分:19)
dt
nullable
您需要访问其Value
if (datetime.HasValue)
dt = datetime.Value;
重要的是要记住它可以是NULL
。这就是为什么nullable
结构具有HasValue
属性,告诉您它是否为NULL
。
您还可以使用null-coalescing operator
??
分配默认值
dt = datetime ?? DateTime.Now;
如果左侧的值为NULL
答案 2 :(得分:2)
问题是您将nullable type传递给非可空类型。
您可以执行以下任何解决方案:
一个。将您的dt
声明为可以为空的
DateTime? dt = dateTime;
B中。使用Value
DateTime? datetime
属性
DateTime dt = datetime.Value;
℃。施展它
DateTime dt = (DateTime) datetime;
答案 3 :(得分:1)
您应该使用datetime参数的.Value。 所有Nullable结构都有一个value属性,它返回对象的具体类型。但是你必须事先检查一下它是否为null,否则会出现运行时错误。
即:
datetime.Value
但请先查看它是否有值!
if (datetime.HasValue)
{
// work with datetime.Value
}