【问题标题】:Why does DateTime's AddMonths function takes Int32 parameter and not Int16为什么 DateTime 的 AddMonths 函数需要 Int32 参数而不是 Int16
【发布时间】:2011-05-25 13:07:31
【问题描述】:

我对这个东西很好奇

Int32

int addmonths_int = 10;
DateTime.Now.AddMonths(addmonths_int);

Int16

short addmonths_short = 10;
DateTime.Now.AddMonths(addmonths_short);

如果我们可以在AddMonths 函数中将Int16 作为参数,并且月份的值永远不会超过12,那么为什么.NET Framework 使用月份作为Int32 而不是Int16。 ..

如果将月份声明为 Int16... !!??!!

我在这里想如果month 本来是Int16 那么它会在某些地方节省一些长度.. 我认为Memory Allocation

更新

对 DateTime.Now.Month 属性的建议是什么,不能是 Int16 而不是 Int32 吗??

一切都是一样的吗??

【问题讨论】:

  • @all 这个 SO 问题也可能会突出主题 stackoverflow.com/questions/270263/…
  • 您可以在日期上添加 18 个月,因此上限 12 没有意义(如果这样做,Byte 将比 Int16 更合适)
  • @all ok 我同意@philippe-leybaert 和 jason 的概念,但是对于DateTime.Now.Month 属性的建议是什么,难道不是Int16 而不是Int32 吗??跨度>
  • 再一次,如果我们进行微优化,当Byte 可用时,我们为什么要停在Int16
  • @damien-the-unbeliever 是的

标签: c# .net datetime


【解决方案1】:

首先,可以超过 12 个月。没有什么能阻止您计算日期加上 435345 个月。

关于 Int32 的选择:Int32 是 32 位系统的原生整数数据类型,因此它是最有效的数据类型。

【讨论】:

  • +1。为什么要浪费 16 位(在 Int16 的情况下)或 24 位(在 Byte 的情况下)?此外,您不能在一个月中添加超过 12 个的假设是不正确的。有效的月数可能限制为 12(并且仅当它是从 1 开始时),但您可以将大量月数添加到日期以计算新日期。
  • @Mike:我不明白你所说的“浪费”是什么意思。内存究竟浪费在哪里?该参数几乎肯定会被注册,并且该寄存器在现代硬件上至少有 32 位宽。您真的要生成额外代码,以确保 32 位寄存器中的数字永远不会大于 16 位整数吗?您愿意生成多少额外代码来确保前 16 位始终为零?
  • @Eric,实际上,我认为我们非常同意。尽管我很乐意承认您在 CLR 和编译器内部的知识非常丰富——我只是一个坐在椅子上的理论家,我对这些东西如何工作的了解充其量是微不足道的。我的观点是,无论如何你都会使用 32 位,并且试图通过分配更小的数据类型来节省内存在很大程度上是没有意义的,尤其是因为 关于方法契约的假设是不正确的。
  • @Mike:啊,是的,那么我们的协议非常激烈。我误解了你论点的主旨。我的错!
【解决方案2】:

如果我们可以在 AddMonths 函数中将 Int16 作为参数,并且月份的值永远不会超过 12,那么为什么 .NET Framework 使用月份作为 Int32 而不是 Int16...

为什么不能将 13 个月加到今天,最后得到 2012 年 6 月 25 日?

【讨论】:

  • 这个答案不是时间不变的。 :)
【解决方案3】:

你的假设不正确:

月份的值也永远不可能 超过 12 个

即使您是正确的,我认为使用 16 位整数而不是 32 位整数不会给您带来太多收益:可能 DateTime 对象的大小根本不会改变。

【讨论】:

    【解决方案4】:

    您可以使用 AddMonths 函数将超过 12 个月添加到给定日期。

    实际的限制如下;

    月份值必须在 +/-120000 之间

    【讨论】:

      猜你喜欢
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 2021-01-28
      • 2016-03-31
      相关资源
      最近更新 更多