Arhn - архитектура программирования

Манипуляции с датами и запросы SQL datetime WHERE

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

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

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

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

Вопрос 1: Итак, моя идея заключалась в том, чтобы получить объект Date() из средства выбора даты, которое находится в приведенной выше форме, затем добавить к нему «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, при условии, что время начала/окончания указано в формате даты и времени.

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

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

  • Никогда не проглатывайте исключения молча catch(Exception e){ } 26.11.2018
  • Это только для тестирования, вышеуказанный метод отсутствует в моем приложении, а является попыткой выяснить, как решить вопрос 1. Спасибо, что указали на это. 26.11.2018
  • Я рекомендую вам избегать класса SimpleDateFormat. Он не только давно устарел, но и заведомо хлопотный. Сегодня у нас намного лучше java.time, современный API даты и времени Java. 26.11.2018

Ответы:


1

На второй вопрос

если у вас есть начальный и конечный столбцы в виде даты и времени и вы хотите быть уверены, что строковые значения совпадают в 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

26.11.2018
  • Это интересно, спасибо за информацию! Если никто не ответит, как добиться того, что мне нужно в моем первом вопросе, я обязательно отмечу это как ответ через пару дней. Мне очень нужна помощь с первой частью, это то, что действительно испортило мою неделю. 26.11.2018
  • @Joe для первого вопроса я добавил краткое предложение 26.11.2018
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..