【问题标题】:Time Function in Progress 4GL进行中的时间函数 4GL
【发布时间】:2019-07-02 21:40:25
【问题描述】:

我想在代码中插入 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.

【问题讨论】:

  • TIME 只返回整秒。如果你真的需要一个毫秒组件(我认为当前没有这个问题,但你在描述中确实暗示了它),那么你需要使用像 NOW 这样的函数。

标签: openedge progress-4gl


【解决方案1】:

你指定的条件可以写成:

if ( time >= ( 8 * 60 * 60 )) and ( time < ( 20 * 60 * 60 )) then 
  do:
    message "first shift".
  end.
 else
  do:
    message "second shift".
  end.

【讨论】:

  • 谢谢汤姆,根据我的代码逻辑,第二班将于次日上午 7:59:59 结束。如果我更新如下代码会不会有问题: ELSE DO: ASSIGN StartDDT = dt_tm2dec(DATE(TODAY),20 * 60 * 60)。 EndDDT = dt_tm2dec(日期(今天 + 1),07 * 60 * 60 + 59 * 60 + 59)。结束。
  • 这取决于 dt_tm2dec() 函数的作用以及生成的数据如何在代码的其他地方使用。如果其余代码与这个小示例一致,您的作业似乎可能会按照您的意愿行事。
  • 将变量 StartDDT 定义为十进制不撤消。分配 StartDDT = dt_tm2dec(PreviousDate, PTinSec) EndDDT = dt_tm2dec(CURRENTDATE,CTinSec)。以上是我定义和分配的东西。
  • 是的,我知道。但我不知道这些如何与您的其余代码一起使用。鉴于您所展示的内容并假设此示例可能适合的代码的合理行为,是的,您正在做的事情可能也会按照您期望的方式工作。
【解决方案2】:

您可以使用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 数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多