我正在寻找一种通用模式来分解一些常见的代码:我需要在具有不同算术属性的类之间实现代数加法和减法。一个典型的例子是可以用秒、小时和分钟表示的间隔,我用一个具有三个int属性的类实现了它。
例如,如果我想减去0秒、0分钟、1小时的周期,减去0秒、30分钟、0小时的周期,我不想获得0秒、-30分钟、1小时的周期。
我需要编码两个时间间隔之间的加减法,有没有通用的模式来编码这个代数?我应该寻找不同的代表吗?
使现代化
我把这个问题过于简化了,因为我的用例通常适用于以年、月、日及其组合表示的时间段。困难在于,用户以天、月、年为单位进行思考,不可能进行精确的转换(一个月有多少天?嗯……这是不同的)
因此,用户知道他想在3天内计算出一些东西,当计算发生时,我会将该时间间隔应用到参考日期,得到正确的结果。我无法在总的天数内转换6M 3D,因为这取决于您选择的参考日期,并且这将随时间而变化。
如果您想要的是“标准化”显示,即最大小时数、最大分钟数、最大秒数,我只需将持续时间存储为秒数,并计算每次您想要格式化持续时间时它包含的小时/分钟/秒数:
private int durationInSeconds;
public int getHours() {
return durationInSeconds / (60 * 60);
}
public int getMinutes() {
return (durationInSeconds % (60 * 60)) / 60;
}
public int getSeconds() {
return durationInSeconds % 60;
}
public void subtract(Duration duration) {
if (duration.durationInSeconds > this.durationInSeconds) {
throw new IllegalArgumentException("can't handle negative durations")
}
this.durationInSeconds -= duration.durationInSeconds;
}
(未测试,但你应该知道)
请注意,joda time有一个Duration类,可以满足您的需要。
对于这个用例,你可能想看看scala时间
以下是其自述文件的摘录,显示了您可以使用的语法:
(2.hours + 45.minutes + 10.seconds).millis
returns Long = 9910000
本文向大家介绍java模拟实现微信红包算法,包括了java模拟实现微信红包算法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了java实现微信红包算法的具体代码,供大家参考,具体内容如下 实现过程 1.代码如下(示例): 2.代码如下(示例): 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
用java实现以下场景,有100条商品,每个商品的价格0到1000元不等 商品数据: 例如200元 加价之后就是240元 利润是40元 首先把0到300元的商品的加价30%,301到500的加价20%,501到1000元商品的加价10%, 然后0到300元的商品订单有300条,301-500的商品订单有400条,501-1000的商品订单有300条, 最后计算他的总利润有多少,最好写出算法
本文向大家介绍Java实现SHA-1算法实例,包括了Java实现SHA-1算法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java实现SHA-1算法的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的java程序设计有所帮助。
问题内容: 具体来说,在对象引用相等的情况下,==运算符的作用是什么? 如果在比较时引用对相同的对象地址求值,则比较是否返回true?还是利用两个引用的hashCode值确定对象是否相同? 具体来说,我想知道==操作引用 了JVM管理的哪些数据结构以 进行参考比较。==是否依靠OOP进行参考比较? 对我来说不幸的是,JLS没有定义==运算符必须如何工作。Java API文档没有提及==应该做什么(
本文向大家介绍Java语言实现快速幂取模算法详解,包括了Java语言实现快速幂取模算法详解的使用技巧和注意事项,需要的朋友参考一下 快速幂取模算法的引入是从大数的小数取模的朴素算法的局限性所提出的,在朴素的方法中我们计算一个数比如5^1003%31是非常消耗我们的计算资源的,在整个计算过程中最麻烦的就是我们的5^1003这个过程 缺点1:在我们在之后计算指数的过程中,计算的数字不都拿得增大,非常的
本文向大家介绍Java实现雪花算法(snowflake),包括了Java实现雪花算法(snowflake)的使用技巧和注意事项,需要的朋友参考一下 本文主要介绍了Java实现雪花算法(snowflake),分享给大家,具体如下: 简单描述 最高位是符号位,始终为0,不可用。 41位的时间序列,精确到毫秒级,41位的长度可以使用69年。时间位还有一个很重要的作用是可以根据时间进行排序。注意,41位时