java从数据库获取持续时间

时间:2010-08-25 05:52:54

标签: 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天。等?

5 个答案:

答案 0 :(得分:2)

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

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

在Java中,表示这一点的标准方法实际上是以毫秒为单位的长值,ala System.currentTimeMillis()

所有标准Java类都旨在处理绝对时间,需要处理夏令时,闰年和所有废话。至少根据您提供给我们的数据,您无法获得所需的信息:无法判断这一天是否为夏令时,因此需要23或25小时而不是24小时。

答案 1 :(得分:1)

我更喜欢我自己的课程,凌驾于“基本”方法。

public class SysDuration implements Comparable {

    int day;
    int hour;
    int min;

    public SysDuration(int day,int hour,int min) {
    }

    public boolean equals(Object obj) {
    }

    public int hashCode() {
    }

    public int compareTo(Object obj) {
    }

    public boolean spendLess(SysDuration dur) {
    }

}

答案 2 :(得分:1)

已经有很多好的答案。

一个sugegstion,可能超出范围,如果你在java中使用我想要的持续时间 只计算并将其存储在一个变量中,通常是一个很长的毫秒 如果这个分辨率足够好。通常分为3个变量 使大部分代码更复杂。

计算更容易,并且与诸如jodatime等类似的lib进行交互 更简单。

答案 3 :(得分:0)

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

像Calendar这样的类没有帮助,它们用于操纵实际日期,你已经在持续时间内工作。

答案 4 :(得分:0)

Jodatime supports durations然后你就可以免费获得所需的操作。

如果你对添加另一个依赖关系和学习曲线犹豫不决,我会创建一个带有字段的自定义类,该字段将持续时间存储为所需精度的数字。然后添加一些方法进行比较,或者返回一个Calendar对象或一个日期,并减去你的持续时间。

我的猜测是,这将比使用标准Java API更清晰,当你开始操作时间时,它总是以复杂,笨重的代码结束。