java从数据库获取持续时间

java从数据库获取持续时间,java,database,algorithm,Java,Database,Algorithm,表结构: sysdurationtimeday , sysdurationtimehour, sysdurationtimeminute 1, 12,10 3, 23,10 0, 0,10 我从数据库中得到了这3个字段,在得到这3个值之后,我可以使用什么技术对哪个Java对象进行强制转换?(可能是Calendar.class、TimeStamp.class) 并且使用它与记录相比花费不到1天,超过1天+不到3天。等等?如果你真的想要“超过1天”,也就是说没有舍入,所以d=1,h=23,m=5

表结构:

sysdurationtimeday , sysdurationtimehour, sysdurationtimeminute
1, 12,10
3, 23,10
0,  0,10
我从数据库中得到了这3个字段,在得到这3个值之后,我可以使用什么技术对哪个Java对象进行强制转换?(可能是Calendar.class、TimeStamp.class)

并且使用它与记录相比花费不到1天,超过1天+不到3天。等等?

如果你真的想要“超过1天”,也就是说没有舍入,所以d=1,h=23,m=59给你1天,而不是2天,那么你可以只使用sysdurationtimeday,完全忽略小时和分钟。(假设sysdurationtimehour中的时间不超过24小时)

诸如Calendar之类的类没有帮助,它们是用于操纵实际日期的,您已经在持续时间内工作。

然后您可以免费获得所需的操作

如果您对添加另一个依赖关系和学习曲线犹豫不决,我将创建一个小的自定义类,其中包含一个字段,将持续时间存储为所需精度的数字。然后添加一些方法来进行比较,或者返回一个日历对象或一个日期,并将其与持续时间相加或相减


我的猜测是,这将比使用标准Java API更干净,当您开始操作时间时,它总是以复杂、笨拙的代码结束。

我更喜欢我自己的类,覆盖“基本”方法


只要你说的是持续时间,而不是绝对时间,这就很容易。只需以方便的单位表示时间,例如秒:

time_in_seconds = 86400*sysdurationtimeday +
                  3600*sysdurationtimehour +
                  60*sysdurationtimeminute
在Java中,表示这一点的标准方法实际上是以毫秒为单位的长值,即ala
System.currentTimeMillis()


所有标准Java类都是用来处理绝对时间的,并且需要处理夏令时、闰年以及所有这些废话。至少从你给我们的数据来看,你没有所需的信息:无法判断这一天是否是夏令时,因此需要23或25个小时而不是24个小时。

已经有很多好的答案了

如果您在java中使用持续时间,我更愿意使用一个建议,可能超出范围 只需计算并将其存储在一个变量中,通常是一个以毫秒为单位的长变量 如果这个决议足够好的话。通常在3个变量中进行拆分 使大多数代码更加复杂

计算更容易,与诸如jodatime和类似的LIB集成也更容易 更简单

time_in_seconds = 86400*sysdurationtimeday +
                  3600*sysdurationtimehour +
                  60*sysdurationtimeminute