AnyLogic
Развернуть
Размер шрифта

Временные функции

Получение текущего модельного времени

Вы можете получить текущее модельное (логическое) время с помощью функции 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.
Как мы можем улучшить эту статью?