2016-03-30 1 views
2

У меня есть приложение java, использующее date() для получения текущей даты, и я пытаюсь манипулировать датой, которую он получает с даты() для целей тестирования.Как манипулировать java.util.Date date() извне двоичного кода java?

Я попытался установить системную дату (в Windows) на дату в прошлом, например, 1/1/2014, но приложение java, похоже, продолжает получать дату в реальном времени от какой-либо другой, кроме системной даты.

Возможно ли манипулировать датой, и если да, то как я могу манипулировать датой, возвращаемой функцией date() извне двоичного?

+0

Какую реализацию java вы используете? – Natecat

+0

@Natecat java version "1.7.0_80" JRE build 1.7.0_80-b15 – Azeworai

+0

@ TungD.Nguyen, я убил процессы после изменения даты и перезапуска приложения Java, но я все еще получаю "фактическую дату реального времени", а не 1/1/2014 – Azeworai

ответ

1

Класс Date в Java использует системное время, указанное через System.currentTimeMillis(). Это, в Windows, вызывает вызов API Win32/64 с низким разрешением, который всегда возвращает «текущую системную дату и время в формате UTC», согласно Microsoft documentation.

Если был доступ к коду, и требовалось создать пользовательский объект Date, представляющий собой какое-то произвольное время помимо тока, рекомендуемый способ был бы через класс Calendar.

Например:

Calendar calendar = new GregorianCalendar(); 
calendar.set(Calendar.YEAR, 2014); 
calendar.set(Calendar.MONTH, 0); // 0 = January, 11 = December 
calendar.set(Calendar.DAY_OF_MONTH, 1); // 1 to 31 

Учитывая вышеизложенное, новый объект Date может быть получен следующим образом:

Date date = calendar.getTime(); 
2

Нет необходимости манипулировать извне Java. Ваши тесты в Java могут изменять значения, указанные в текущий момент.

java.time

Вы используете старые устаревшие классы. Эти классы были вытеснены инфраструктурой java.time, встроенной в Java 8 и более поздние версии.

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

Clock класса предлагает некоторые статические методы, такие как fixed, offset и tick удобно обеспечить измененную Реализацию.

Смежные вопросы