首页 > 解决方案 > 在填写字段中添加 x 分钟的代码

问题描述

我是编程和进步的初学者,第一次在 StackOverflow 上发帖,希望我在正确的地方发帖!

我有一个填写字段,我在其中输入时间(hh:mm),字符格式。我还有两个箭头,一个指向前方,一个指向后方,我希望它们在推动时分别加/减 20 分钟。

为此编写代码的好方法是什么?将当前时间值转换为整数和午夜后的秒数,然后添加/减去 1200 秒?如何将结果恢复为 hh:mm 格式以显示在填充中?

非常感谢任何帮助!/艾伦

标签: openedgeprogress-4gl

解决方案


我认为这将满足您的需求。让箭头按钮上的ON CHOOSE触发器运行 changeMins 过程。从您的填写中传递字符时间字符串和“加”或“减”。输出值将是新调整的时间字符串。然后,您可以将填充的屏幕值设置为该输出值。

DEFINE VARIABLE cTime AS CHARACTER NO-UNDO.

cTime = "12:45".
RUN changeMins (INPUT-OUTPUT cTime, INPUT "Add").
MESSAGE cTime VIEW-AS ALERT-BOX INFORMATION BUTTONS OK.


PROCEDURE changeMins:

    DEFINE INPUT-OUTPUT PARAMETER pcTime AS CHARACTER NO-UNDO.
    DEFINE INPUT PARAMETER pcAction AS CHARACTER NO-UNDO.

    DEFINE VARIABLE iHr AS INTEGER NO-UNDO.
    DEFINE VARIABLE iMn AS INTEGER NO-UNDO.

    /* Split the time string into hours and minutes */
    ASSIGN
        iHr = INTEGER(ENTRY(1, pcTime, ":"))
        iMn = INTEGER(ENTRY(2, pcTime, ":"))
        NO-ERROR.

    IF ERROR-STATUS:ERROR THEN RETURN.

    /* Adjust the time */
    CASE pcAction:
        WHEN "Add" THEN iMn = iMn + 20.
        WHEN "Subtract" THEN iMn = iMn - 20.
    END CASE.

    /* Correct for boundaries */
    IF iMn > 59 THEN
        ASSIGN
            iMn = iMn - 60
            iHr = iHr + 1.

    IF iMn < 0 THEN
        ASSIGN
            iMn = iMn + 60
            iHr = iHr - 1.

    IF iHr > 23 THEN iHr = iHr - 24.
    IF iHr < 0 THEN iHr = iHr + 24.

    /* Build the new time string */
    pcTime = STRING(iHr, "99") + ":" + STRING(iMn, "99").

END PROCEDURE.

在此示例中,将 cTime 字符串更改为不同的时间并运行它。


推荐阅读