Вы можете получить текущее модельное (логическое) время с помощью функции time(). Простая функция time() возвращает текущее модельное время как количество единиц модельного времени, прошедшее с начала запуска модели. Другая функция, time(TIME_UNIT) возвращает количество промоделированных единиц времени, заданных аргументом функции. Например, функция time(MINUTE) возвращает количество промоделированных минут (число с двойной точностью).
Даты в AnyLogic задаются Java классом Date. Дата состоит из значений года, месяца, дня месяца, часа дня, минуты, секунды и миллисекунды. Чтобы получить значение текущей даты, вызовите функцию date().
Существует некоторое количество различных функций, которые возвращают отдельные компоненты текущей даты (также все эти функции могут использоваться в виде <имя функции>(дата), и тогда они возвращают компонент заданной, а не текущей даты):
| Функция | Описание |
|---|---|
| int getYear() | Возвращает год текущей даты. |
| int getMonth() | Возвращает месяц текущей даты: значение типа int, соответствующее одной из констант JANUARY, FEBRUARY,, … |
| int getDayOfMonth() | Возвращает день месяца текущей даты: 1, 2, … |
| int getDayOfWeek() | Возвращает день недели текущей даты: одну из констант SUNDAY, MONDAY, …. Возвращается значение типа int, соответствующее дню недели. |
| int getHourOfDay() | Возвращает час в сутках текущей даты в 24-часовом формате: то есть, для 10:20 часов вечера возвращает 22. |
| int getHour() | Возвращает час в сутках текущей даты в 12-часовом формате: то есть, для 10:20 часов вечера возвращает 10. |
| int getAmPm() | Возвращает 0, если текущее время — до полудня, и 1 — после полудня. |
| int getMinute() | Возвращает минуту часа текущей даты. |
| int getSecond() | Возвращает секунду минуты текущей даты. |
| int getMillisecond() | Возвращает миллисекунду секунды текущей даты. |
Допустим, основными единицами времени в вашей модели являются часы. Как тогда задать какое-либо событие, которое должно произойти через два дня? Или как задать промежуток времени, равный пяти минутам? Конечно, вы можете задать эти промежутки времени как 48 и 5.0 / 60. Но будет проще использовать специальные функции, которые возвращают заданный промежуток времени в соответствии с текущими настройками единиц времени в модели:
| Функция | Описание |
|---|---|
| double millisecond() | Возвращает интервал времени, равный одной миллисекунде. |
| double second() | Возвращает интервал времени, равный одной секунде. |
| double minute() | Возвращает интервал времени, равный одной минуте. |
| double hour() | Возвращает интервал времени, равный одному часу. |
| double day() | Возвращает интервал времени, равный одному дню. |
| double week() | Возвращает интервал времени, равный одной неделе. |
Например, если заданными единицами времени являются часы, то вызов minute() вернет 0.0166, а вызов week() вернет 168.0. Таким образом, вместо того, чтобы запоминать, какие единицы времени сейчас заданы, и использовать значения вроде 48 или 5.0 / 60, вы просто можете написать 2 * day() и 5 * minute(). Вы также можете комбинировать различные единицы времени в одном выражении: 3 * hour() 20 * minute().
Наиболее важно то, что выражения с этими функциями являются независимыми от настроек единиц времени: в этих выражениях всегда будут вычисляться корректные промежутки времени. Поэтому мы рекомендуем использовать minute(), hour(), day() и т. д. в числовых выражениях, которые задают промежутки времени, ведь таким образом вы можете спокойно менять единицы времени без необходимости менять всю модель.
| Функция | Описание |
|---|---|
| double addToDate(Date date, int timeUnit, double amount) |
Возвращает дату, которая наступит после заданного периода времени (в заданных единицах времени) от даты, указанной в date. К примеру: addToDate(date(), DAY, 1 ) возвращает дату «завтра»: (текущая дата + 1 день) |
| Date getDateWithTimeNextTo(Date date, int hourOfDay, int minute, int second) | Возвращает дату, следующую за указанной датой, с указанным значением времени в часовом поясе, используемом системой по умолчании. |
| double dateToTime(Date date) | Преобразовывает заданную дату в модельное время с учетом исходной даты, начального времени и заданных единиц модельного времени. |
| double differenceInCalendarUnits( time unit constant, double time1, double time2 ) | Возвращает разницу (time2 - time1) двух модельных дат (относящихся к заданным модельным временам) в указанных единицах измерения времени. В результате получаем количество единиц измерения времени, которое необходимо добавить к модельному времени time1, чтобы получить time2. В зависимости от заданных дат, результат может быть отрицательным, а также иметь дробную часть. |
| Date dropTime(Date date) | Обнуляет время, приводя его к виду 00:00:00.000 и возвращает ту же дату с обнуленным временем. |
| Date timeToDate(double t) | Преобразовывает заданное модельное время в дату с учетом начальной даты, начального времени и выбранных единиц модельного времени. Возвращает null, если время равно бесконечности. |
| Date toDate(int year, int month, int day, int hourOfDay, int minute, int second) | Возвращает дату в часовом поясе по умолчанию, включающем заданные (год, месяц, день, и т.д.). |
| long toDateInMillis(int year, int month, int day, int hourOfDay, int minute, int second) | Возвращает дату в часовом поясе по умолчанию, включающем заданные (год, месяц, день, и т.д.). Функция похожа на toDate(int, int, int, int, int, int), но возвращает дату в виде набора миллисекунд, начиная с даты January 1, 1970, 00:00:00 GMT. |
| double toModelTime(double value, time unit constant) | Преобразовывает интервал времени (заданный в виде указанных единиц измерения времени) в единицы модельного времени. Интервал времени задается с помощью аргументов функции: сначала, вы передаете значение аргументом value, а потом, вторым аргументом units, задаете единицы измерения времени. К примеру, единицы модельного времени в вашей модели - минуты. В этом случае вызов функции toModelTime(195, SECOND) вернет 195/60 = 3.25 |
| double toTimeoutInCalendar(time unit constant, double amount) | Возвращает интервал в единицах модельного времени, который равен заданному amount в указанных единицах модельного времени от текущей даты модели. К примеру, toTimeoutInCalendar( DAY, 1 ) возвращает интервал в единицах модельного времени от даты date() к дате date() 1 день. |
| double getTimeoutToNextTime(int hourOfDay, int minute, int second) | Возвращает тайм-аут (в единицах модельного времени), который требуется, чтобы достичь ближайшей даты, допускающей заданное значение времени. |
| double toTimeUnits( double modelTimeValue, time unit constant) | Преобразовывает интервал времени (заданный в виде указанных единиц измерения времени) в заданные единицы измерения времени. К примеру, единицы модельного времени — минуты. В этом случае вызов функции toTimeUnits(5.5, SECOND) вернет 5.5*60 = 330. |
-
Как мы можем улучшить эту статью?
-