Есть рест - сервис, принимающий xml и обрабатывающий его библиотекой jaxb. Для одного из полей написан адаптер для даты:
public class DateAdapter extends XmlAdapter<String, Date> {
private final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS Z");
@Override
public String marshal(Date v) throws Exception {
synchronized (dateFormat) {
return dateFormat.format(v);
}
}
@Override
public Date unmarshal(String v) throws Exception {
synchronized (dateFormat) {
return dateFormat.parse(v);
}
}
}
Итак, я передаю дату "2009-12-31T23:59:59.999 +0000" и адаптер преобразует из строки в Date
Потом я вытягиваю объект из базы и передаю клиенту, то есть Date to String -> 2010-01-01T02:59:59.999 +0300 (добавились часы и временной сдвиг) и получается так, что я отдаю уже с временным смещением.
Как отключить это преобразование, зависимое от сервера, на котором выполняется код?
Дело в том, что вы видимо используете класс util.Date. Реализация данного класса представляет из себя хранение колличества миллесекунд по UTC от некоторой точки во времени X. Но поскольку данный класс описывает точку во времени, он ориентируется на системную временную зону.
Следовательно, как только вы распарсили время 2009-12-31T23:59:59.999 +0000 в util.Date, в этот класс сохранилось колличество миллисекунд по UTC, которые соответствуют этой точке во времени, но само представление класса util.Date оринентируется на дефолтную временную зону (у вас видимо зона +03) и нет возможности управлять зонной для данного класса, отсюда форматер SimpleDateFormat не знает какая была зона до того, как время сохранилось в util.Date на момент обратного преобразования, и ориентируется на деволтную зону.
Прежде, чем преступать к построению архитектуры приложения относительно времени, рекомендовал бы прочитать данный стандарт, описывающий возможные типы времени - Working with Time Zones. Для того, чтобы определить с каким типом времени вы работаете и тогда уже предпринимать шаги по представлению даты в системе.
В данном случае могу предложить вам посмотреть на классы, которые умеют управлять своей зоной и использовать их в преобразованиях. Например, для java версии 8 и выше - ZonedDateTime, для ранних версий - joda DateTime.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Создал метод dbstore, который должен создавать базу, если она пуста, извелкать всех пользователей и тд
Всех приветствуюЯ пытаюсь сделать что-то вроде real-time video streaming'a
Мне нужно сделать массив в который я должна поместить 10 000 000 000 мелких чиселЯ дошла к тому что это не возможно