Можно ли изменить базовое эталонное время в миллисекундах с 1970 на 2008 год в Java (например, JSR-310)
Вопрос
Я хочу иметь возможность изменить базовую ссылку на миллисекунд с 1970 по 2008 год в Java, чтобы я мог сохранить пространство в базе данных и уникальных идентификатора.
Предпочтительно с Joda-Time.
Предстоящий jsr-310 в предполагаемой версии Java 7 реализует это.
в Дискретная временная шкала В разделе этой ссылки указано, что отсчет миллисекунд изменился с 1970 по 2008 год.
http://today.java.net/pub/a/today/2008/09/18/jsr-310-new-java-date-time-api.html
Единственный другой вариант, который я вижу, - это математически реализовать его каждый раз, когда мне нужно искать запись.
Например.
DateTime dt = new DateTime();
long now = dt.getMillis();
DateTime dt2 = new DateTime(2008, 1, 1, 0, 0, 0, 0);
long then = dt2.getMillis();
long smallerDate = now - then;
Меньшая дата будет храниться в БД.
-- Редактировать --
Итак, я неправильно понял JSR-310, и это невозможно.
Существуют лучшие способы сэкономить место, а затем головная боль в обработке тысяч запросов для расчета длинных.
Я хотел записывать долгосрочные даты, потому что я никогда не узнаю, куда я буду перемещать ДБ, возможно, mysql => Oracle.
Поэтому мне не нужны были временные метки, мне просто нужны были BigInts.
Решение
Нет, вы не можете, и было бы плохой идеей, если бы вы могли.Каждая временная метка в вашей базе данных будет использовать одно и то же пространство, независимо от того, насколько велико это число.(Предполагая, что вы сохраняете число как число, а не как строку или что-то в этом роде.)
Теперь, если вы Действительно хотите этого, вам придется написать это самостоятельно.Т.е.вычтите время из ваших временных меток перед помещением их в базу данных и добавьте время к временным меткам, когда вы получите их обратно.Но это вызывает проблемы с обслуживанием.(На самом деле, использование временных меток вместо собственного типа данных DATETIME базы данных приводит к проблемам.)