如何在c#中将可为空的datetime转换为十进制?

本文关键字:datetime 转换 十进制 | 更新日期: 2023-09-27 18:15:50

我正在尝试将DateTime?值转换为Decimal。(注:DateTime?Nullable)

从此格式4/1/2011 12:00:00 AM到此格式(Decimal类型)20110401

如何做到这一点?

如何在c#中将可为空的datetime转换为十进制?

你可以试试这个,,

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进行排序。