Java 8 Java.Time: добавление TemporalUnit в Mystant VS LocalDateTimeJAVA

Программисты JAVA общаются здесь
Anonymous
Java 8 Java.Time: добавление TemporalUnit в Mystant VS LocalDateTime

Сообщение Anonymous »

Я играю с новым пакетом Java.Time в Java 8. У меня есть устаревшая база данных, которая дает мне java.util.date , которую я конвертирую в мгновенный .

То, что я пытаюсь сделать, это добавить период времени, основанный на другом флагсе Database. Я мог бы добавить дни, недели, месяцы или годы. Я не хочу заботиться о том, что я добавляю, и я хотел бы иметь возможность добавлять больше вариантов в будущем. Мгновенный, по -видимому, не поддерживает операции в больших единицах времени. Хорошо, что угодно, localDateTime делает. < /p>

Так что дает мне этот код: < /p>

Код: Выделить всё

private Date adjustDate(Date myDate, TemporalUnit unit){
Instant instant = myDate.toInstant();
LocalDateTime dateTime = LocalDateTime.ofInstant(instant, ZoneId.systemDefault());
dateTime = dateTime.plus(1, unit);
Instant updatedInstant = dateTime.atZone(ZoneId.systemDefault()).toInstant();
return new Date(dueInstant.toEpochMilli());
}
< /code>

Теперь это мой первый раз, когда я использую новый API, поэтому я мог что -то пропустить здесь. Но мне кажется неуклюжим, что я должен идти: < /p>

Date --> Instant --> LocalDateTime --> do stuff--> Instant --> Date.
< /code>

Даже если бы мне не пришлось использовать часть даты, я все равно думаю, что это было немного неловко.  Итак, мой вопрос: я делаю это совершенно неправильно и как лучше всего это сделать? < /p>



 edit < /strong>: расширение обсуждения в комментариях. Спасибо всем. < /P>

Теперь более практичное рассмотрение.  Допустим, пользователь отправляет мне дату, где бы он ни находился в мире, произвольный часовой пояс.  Они отправляют мне 2014-04-16T13: 00: 00 
, которые я могу разобраться в локальном времени. Затем я преобразую это непосредственно в java.sql.timestamp и сохраняюсь в своей базе данных. Все хорошо. Затем я возвращаю это значение своему пользователю, используя форматирование ISO_DATE_TIME. Результатом является 2014-04-16T09: 00: 00 .

Я предполагаю, что эта разница связана с некоторым типом неявного преобразования в/из UTC. Я думаю, что мой пояс по умолчанию может применяться к значению (EDT, UTC-4), которое объясняет, почему число выключено на 4 часа. < /P>

Новые вопросы (ы). Где здесь происходит неявное преобразование из местного времени в UTC? Какой лучший способ сохранить часовые пояса. Разве я не буду идти непосредственно с местного времени в качестве строки (2014-04-16T13: 00: 00) до LocalDateTime ? Должен ли я ожидать часового пояса от пользовательского ввода?

Подробнее здесь: https://stackoverflow.com/questions/227 ... aldatetime

Вернуться в «JAVA»