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