Java получить продолжительность из базы данных - PullRequest
2 голосов
/ 25 августа 2010

структура таблицы:

sysdurationtimeday , sysdurationtimehour, sysdurationtimeminute
1, 12,10
3, 23,10
0,  0,10

У меня есть эти 3 поля из базы данных, после получения этих 3 значений, какой метод я могу использовать для приведения к какому объекту Java?(возможно Calendar.class, TimeStamp.class)?

и использовать его для сравнения с записью тратится менее 1 дня, более 1 дня + менее 3 дней.и т.д.

Ответы [ 5 ]

2 голосов
/ 25 августа 2010

Пока вы говорите длительности, а не абсолютные времена, это довольно просто.Просто выразите время в удобной единице, скажем, в секундах:

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

В Java стандартный способ представить это на самом деле как длинное значение в миллисекундах, ala System.currentTimeMillis().

ВсеСтандартные классы Java предназначены для обработки абсолютного времени и должны иметь дело с летним временем, високосными годами и всем этим дерьмом.По крайней мере, с данными, которые вы нам предоставили, у вас все равно нет необходимой информации: нет никакого способа узнать, был ли день летним днем ​​и поэтому занял 23 или 25 часов вместо 24.

1 голос
/ 25 августа 2010

Множество хороших ответов уже есть.

Предлог, возможно, выходит за рамки, если вы используете длительности в Java, я бы предпочел просто рассчитать и сохранить это в одной переменной, как правило, долго в миллисекундах, если это разрешениеэто достаточно хорошо.Разбиение по 3 переменным обычно усложняет большую часть кода.

Вычисления проще, и объединение с библиотеками, такими как jodatime и аналогичными, будет еще проще.

1 голос
/ 25 августа 2010

Я бы предпочел свой собственный класс, переопределяя "основные" методы.

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) {
    }

}
0 голосов
/ 25 августа 2010

Jodatime поддерживает длительности , и тогда вы получаете операции, необходимые бесплатно.

Если вы не решаетесь добавить еще одну кривую зависимости и обучения, я бы создал небольшой пользовательский класс с полемсохранение длительности в виде числа с желаемой точностью.Затем добавьте несколько методов для сравнения или возврата объекта Calendar или Date, отредактированного и вычтенного с вашей продолжительностью.

Я предполагаю, что в итоге это будет чище, чем при использовании стандартного Java API, который всегда заканчивается сложным, неуклюжий код, когда вы начинаете манипулировать временем.

0 голосов
/ 25 августа 2010

Если вы буквально хотите «больше 1 дня», то есть округления нет, поэтому d = 1, h = 23, m = 59 дает вам 1 день, а не 2 дня, тогда вы можете просто использовать sysdurationtimeday и полностью игнорировать часы иминут.(Предполагается, что у вас не больше 24 в sysdurationtimehour.)

Классы, такие как Calendar, не помогают, они предназначены для манипулирования фактическими датами, вы уже работаете в продолжительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...