Функция времени в прогрессе 4GL - PullRequest
0 голосов
/ 02 июля 2019

Я бы хотел вставить в код 2 сдвига.

  1. (первая смена) Смена начинается с 8: 00: 00: 000 до 19: 59: 59: 999
  2. (вторая смена) Смена начинается с 20: 00: 00: 000 до следующего дня 7: 59: 59: 999

Мне нужно получить вышеуказанные точные данные, которые будут добавлены в приведенный ниже код. Пожалуйста помоги. Ниже приведен код:

IF TIME < (20 * 60 * 60)  THEN  DO: 
     ASSIGN StartDDT = dt_tm2dec(DATE(TODAY), 0)
            EndDDT   = dt_tm2dec(DATE(TODAY),19 * 60 * 60 + 59 * 60 + 59).
END.
ELSE DO: 
    ASSIGN StartDDT = dt_tm2dec(DATE(TODAY),20 * 60 * 60).
            EndDDT  = dt_tm2dec(DATE(TODAY + 1),07 * 60 * 60 + 59 * 60 + 59).
END.

Ответы [ 2 ]

1 голос
/ 02 июля 2019

Вы можете использовать тип данных DATETIME, чтобы получить точность в миллисекундах. Создайте время смены с помощью функции DATETIME, затем сравните с ней свое время Функция NOW показывает текущее время с точностью до миллисекунды:

DEFINE VARIABLE dtShift1 AS DATETIME NO-UNDO.
DEFINE VARIABLE dtShift2 AS DATETIME NO-UNDO.

ASSIGN
    dtShift1 = DATETIME(TODAY, (8 * 60 * 60 * 1000))
    dtShift2 = DATETIME(TODAY, (20 * 60 * 60 * 1000)).

IF NOW >= dtShift1 AND NOW < dtShift2 THEN
    MESSAGE "First shift" VIEW-AS ALERT-BOX INFORMATION.
ELSE
    MESSAGE "Second shift" VIEW-AS ALERT-BOX INFORMATION.

Вы также можете проверить время смены на следующий день, добавив день к TODAY:

dtShift1 = DATETIME(TODAY + 1, (8 * 60 * 60 * 1000))

А если вам нужно обрабатывать разные часовые пояса, используйте тип данных DATETIME-TZ.

1 голос
/ 02 июля 2019

Указанные вами условия можно записать в виде:

if ( time >= ( 8 * 60 * 60 )) and ( time < ( 20 * 60 * 60 )) then 
  do:
    message "first shift".
  end.
 else
  do:
    message "second shift".
  end.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...