Java或.Net中的最佳持续时间类型

Java或.Net中的最佳持续时间类型,java,.net,Java,.net,我在很多地方都看到过这样的情况:一个方法需要一个长的或一个int来表示纳秒、毫秒(最常见)、秒甚至天的持续时间。这也是查找错误的好地方 一旦你意识到持续时间可以是一定的秒数,或者是更符合人类时间感知的时间间隔,那么问题就相当复杂了,因此24小时的持续时间总是在第二天的同一个“挂钟”时间。或者一年是365天或366天,这取决于日期,因此从2月28日开始的一年总是2月28日 为什么没有明确的类型来表示这一点?我在Java或.net中都没有找到Java,请看一下(一个直观且一致的日期/时间库)及其类D

我在很多地方都看到过这样的情况:一个方法需要一个长的或一个int来表示纳秒、毫秒(最常见)、秒甚至天的持续时间。这也是查找错误的好地方

一旦你意识到持续时间可以是一定的秒数,或者是更符合人类时间感知的时间间隔,那么问题就相当复杂了,因此24小时的持续时间总是在第二天的同一个“挂钟”时间。或者一年是365天或366天,这取决于日期,因此从2月28日开始的一年总是2月28日

为什么没有明确的类型来表示这一点?我在Java或.net中都没有找到Java,请看一下(一个直观且一致的日期/时间库)及其类
DateTime
对象可以通过这些对象处理添加和操作


(答案已更改,以反映以下有关句点类的注释)

在.Net中,您可以使用表示时间长度。

这不是一个简单的问题。也许对你来说是个有用的图书馆。它有一个Duration类,可以满足您的要求。

一个表示绝对毫秒数的对象和一个表示“人性化”时间感知的对象,您将其称为什么?Joda的Duration类只是一个围绕ms值的包装器,不能表示“一天”这样更长的持续时间正确。正确-但是Joda提供了
持续时间
期间
类来表示类似的概念。后者不是精确的毫秒数,但可以是“一天”或“一个月”,其精确的实际持续时间取决于其应用的时间间隔的开始……这实际上正是OP所要求的,如果我正确理解他的要求——这看起来确实更相关。我进行了编辑以强调上述内容。许多程序员不知道这种结构的存在,因为他们看不到它在原生C#或VB.NET数据类型中的表示—投票支持您—鼓励更多人也这样做,因此这种经常错过的数据类型是众所周知的。当然,如果您在.NET中减去或添加日期,你得到了一个时间跨度。是的,但这并不完全符合最初问题的要求。例如,没有
TimeSpan.FromYears(int)
方法。在内部,它被测量为一个64位无符号整数,包含自某个历元以来的毫秒数。没有一个月/年的抽象概念适用于所有情况,不管月长和闰年如何。我认为.NET BCL中不存在这样的类型。