如何在c#中将可为空的datetime转换为十进制?
本文关键字:datetime 转换 十进制 | 更新日期: 2023-09-27 18:15:50
我正在尝试将DateTime?
值转换为Decimal
。(注:DateTime?
即Nullable
)
从此格式4/1/2011 12:00:00 AM
到此格式(Decimal
类型)20110401
。
如何做到这一点?
你可以试试这个,,
DateTime? dateTime = DateTime.Today;
string dateStr = dateTime.ToString("MMddyyyy");
decimal dec = Convert.ToDecimal(dateStr);
像这样:
DateTime? myDateTime = GetDateTime();
Decimal.Parse(myDateTime.Value.ToString("yyyyMMdd"));
或:
DateTime myDateTime = GetDateTime();
Decimal.Parse(myDateTime.ToString("yyyyMMdd"));
取决于DateTime
是否为Nullable
。
但是你真的应该考虑用其他的方式来存储它而不是用Decimal
,这就像把电话号码存储为Long
一样,你真的不应该这样做。这主要是因为在以这种方式存储的对象上执行数学运算没有意义。
您可以使用ToBinary()
来获得DateTime
的二进制表示-然后可以将其分配给decimal
。
DateTime dt = DateTime.Now;
decimal dec = dt.ToBinary ();
这是最直接的转换,不涉及到转换成字符串和返回字符串。如果您使用可空日期/时间,只需使用Value
属性来获取实际值(带有错误检查等)
您可以通过一些数学运算来做到这一点:
DateTime? dt = DateTime.Today;
decimal d = dt.Value.Year*10000 + dt.Value.Month*100 + dt.Value.Day
…或者转换为:
DateTime? dt = DateTime.Today;
decimal d = Convert.ToDecimal(dt.Value.ToString("yyyyMMdd"));
如果您尝试使用此十进制值进行排序,请考虑也可以对字符串和DateTimes进行排序。