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

C# 如何在c中将可为空的datetime转换为十进制#,c#,datetime,decimal,C#,Datetime,Decimal,我正在尝试将DateTime?值转换为Decimal。(注意:DateTime?可为null) 从该格式4/1/2011 12:00:00 AM到该格式(属于Decimal类型)20110401 如何做到这一点?你可以通过一点数学来做到这一点: DateTime? dt = DateTime.Today; decimal d = dt.Value.Year*10000 + dt.Value.Month*100 + dt.Value.Day …或将其转换为: DateTime? dt = Dat

我正在尝试将
DateTime?
值转换为
Decimal
。(注意:
DateTime?
可为
null

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


如何做到这一点?

你可以通过一点数学来做到这一点:

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"));

在这种情况下,您尝试使用这个十进制值进行排序,请考虑也可以排序字符串和日期时间。

如下:

DateTime? myDateTime = GetDateTime();
Decimal.Parse(myDateTime.Value.ToString("yyyyMMdd"));
或:

取决于
DateTime
是否为
null

<>但您确实应该考虑将它存储在比十进制< /代码>的其他方式中。这就像存储一个电话号码作为<代码>长。主要是因为数学运算在以这种方式存储的对象上执行时没有意义。

您可以试试这个

DateTime? dateTime = DateTime.Today;
string dateStr = dateTime.ToString("MMddyyyy");
decimal dec = Convert.ToDecimal(dateStr);
您可以使用获取
日期时间的二进制表示形式
——然后可以将其分配给
十进制

DateTime dt = DateTime.Now;
decimal dec = dt.ToBinary ();


这是最直接的转换,不需要转换为字符串并返回。如果您使用的是可为空的日期/时间,只需使用
属性即可从中获取实际值(通过错误检查等)。

您确定要的是
十进制
而不是
字符串
?可以通过
ToString
DateTime.UtcNow.ToString(“yyyyymmdd”)
以您的格式创建字符串表示形式。它必须是十进制的
DateTime.Year*10000+DateTime.Month*100+DateTime.Day
。确实如此。实际上,所有东西(有例外吗?)都支持ToString()。编译并运行良好:DateTime dtNow=DateTime.Now;字符串zNow=dtNow.ToString();为什么它必须是小数点?听起来像是X-Y问题。mydatetime不是字符串,所以当我使用ToString(“yyyyMMdd”)@Nakres时,它会出错-它告诉你什么错误?DateTime不需要是字符串就可以调用
ToString(…)
@Nakres实际存储的日期时间是什么类型的?实际的
DateTime
类型包含
.ToString
方法(基本上,向我们展示您的代码)。数据来自USSI。在我的代码中添加服务后,我可以看到它是这样的:2015年1月4日12:00:00 AMYes,@Nakres但它是什么类型的:
String
Char[]
DateTime
。?它不接受年、月、日和tostring。@Nakres您的DateTime有哪种类型?@Nakres您真的在谈论这个值吗?缺少Convert.ToDecimal(dt.value.tostring(“yyyyMMdd”);worked@Nakres好的,我更新了我的代码。请把你最喜欢的答案标记为“注意”,这样这个话题就可以接近了。我要放开我的心了。如何使用tostring作为datetime。代码真的在您的机器中工作吗?ToString方法位于所有类的基类中,因此它存在于您创建的任何类中!除此之外,这是一个可为空的日期时间,
DateTime.Value.ToString(“mmddyyy”)
@Crowcoder有时称之为DateTime,有时称之为DateTime?。接得好@Crowcoder,为什么需要
dateTime.Value.ToString()
DateTime.ToString()
适合我吗?
DateTime dt = DateTime.Now;
decimal dec = dt.ToBinary ();