Итак, я почти готов съехать на своей машине с моста, и мне действительно нужно стороннее мнение о том, как это сделать, я изо всех сил пытался найти какое-либо действительное решение и чувствую, что это просто все мое сдерживаемое напряжение. меня обратно. При этом любая помощь приветствуется.
Предисловие. Мое приложение обрабатывает клиентов в базе данных 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';