Манипулирование датами и SQL datetime запросы WHERE - PullRequest
0 голосов
/ 26 ноября 2018

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

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

Когда я сталкиваюсь с серьезными ментальными блоками, это преобразование датправильно, а также запрос SQL.Я использую JavaFX datepicker, который возвращает Date () в форме «YYYY-MM-DD» , например на сегодня будет «2018-25-11».Назначения сохраняются в UTC, что приводит меня к моей первой проблеме.

Если сотрудник выбирает дату, скажем, 1 декабря 2018 года, эту дату необходимо преобразовать в UTC, и для этого нужны полные 24 часазапрос из базы данных.

Вопрос 1: Итак, моя идея заключалась в том, чтобы получить объект Date () из datepicker, который находится в приведенной выше форме, затем добавить к нему «00:00:00» ипытаюсь конвертировать в UTC, но я понятия не имею, как это сделать, и не могу найти ничего подходящего, как бы вы поступили так.Мне также нужна конвертированная завтрашняя дата в '00: 00: 00', чтобы я мог получить полный диапазон возможных значений времени UTC для запроса

Вот моя попытка ответа на вопрос 1 с выводом:

//I live in PST, which is UTC-8
test("2018-12-01");

private static void test(String date){
    try{
        DateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date startDate = utcFormat.parse(date + " 00:00:00");
        System.out.println(startDate);

        LocalDateTime today = convertToLocalDateTimeViaSqlTimestamp(startDate);
        today = today.plusDays(1);

        System.out.println(convertToDateViaSqlTimestamp(today));
    }catch(Exception e){
        e.printStackTrace();
    }

}
private static Date convertToDateViaSqlTimestamp(LocalDateTime dateToConvert) {
    return java.sql.Timestamp.valueOf(dateToConvert);
}
private static LocalDateTime convertToLocalDateTimeViaSqlTimestamp(Date dateToConvert) {
    return new java.sql.Timestamp(dateToConvert.getTime()).toLocalDateTime();
}

Вывод :

Fri Nov 30 16:00:00 PST 2018
2018-12-01 16:00:00.0

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

Вопрос 2. База данных содержит время начала работы, в UTC просто для простоты, скажем,«00:00:00» и увеличивается на 8 часов, поэтому конечное время будет «08:00:00», как мне вернуть все записи о встречах, которые попадают между этими моментами времени из вопроса 2, при условии, что время начала / окончания указано в datetimeформат.

Вот что я сделал для вопроса 2, я хотел бы знать, приемлемо ли это, учитывая, что я знаю, что точный формат дат всегда будет в формате «ГГГГ-ММ-ДД» или будетэто потерпело неудачу в каком-то непонятном состоянии?:

SELECT * FROM appointment WHERE start >= '2018-12-01 00:00:00' AND end < '2018-12-01 02:00:00';

1 Ответ

0 голосов
/ 26 ноября 2018

Для второго вопроса

, если у вас есть начальный и конечный столбцы в качестве даты и времени, и вы хотите быть уверены, что строковые значения совпадают в mysql, можно использовать STR_TO_DATE для построения правильной даты и времени

, напримерпредполагая, что ваша дата и время имеют формат 2018-12-01 00:00:00

вы можете

SELECT * 
FROM appointment 
WHERE start >= str_to_date('2018-12-01 00:00:00', '%Y-%m-%d %T')  AND 
        end < str_to_date('2018-12-01 02:00:00',  '%Y-%m-%d %T');

и для первого вопроса вы можете взглянуть на
convert_tz ()функция, чтобы вы могли сделать всю работу, используя запрос

https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_convert-tz

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