【问题标题】:Progress 4GL - week number of year进度 4GL - 一年中的周数
【发布时间】:2016-09-02 16:49:53
【问题描述】:

我正在将日期转换为其周数,但出现错误。你能帮帮我吗?

这是我的代码

function WeekNumber returns integer ( OrderRel.ReqDate as date ):

define var vDay as integer no-undo.

vDay = OrderRel.ReqDate - date( 1, 1, YEAR( OrderRel.ReqDate ) ) + 1.

return integer( truncate( vDay / 7, 0 ) ) + ( if vDay mod 7 <> 0 then 1 else 0 ).   

end function. 

【问题讨论】:

  • 请发布错误信息。另外,我注意到您没有使用“。”作为你的行尾字符。你应该使用“。”然后在每个语句的末尾。

标签: progress-4gl openedge


【解决方案1】:

看起来您正在使用表字段作为函数的输入?您应该改为将其更改为局部变量,然后使用记录调用它:

FUNCTION WeekNumber RETURNS INTEGER ( INPUT pdaDate as DATE ):

    DEFINE VAR vDay AS INTEGER NO-UNDO.

    vDay = pdaDate - DATE( 1, 1, YEAR( pdaDate ) ) + 1  .

    RETURN INTEGER( TRUNCATE( vDay / 7, 0 ) ) + ( IF vDay MOD 7 <> 0 THEN 1 ELSE 0 ) .

END FUNCTION.

MESSAGE WeekNumber( OrderRel.ReqDate ) VIEW-AS ALERT-BOX. 

这使得函数编译并运行!

另一件事是,根据您计算的星期数可能是错误的。

MESSAGE WeekNumber( DATE("2016-09-02") ) VIEW-AS ALERT-BOX.

这在您的系统中可能是正确的,但至少在使用 ISO8601 标准的周编号的瑞典不是。按照这些标准,2016 年 9 月 2 日是第 35 周...

Week numbering on Wikipedia

ISO week date

【讨论】:

    猜你喜欢
    • 2010-09-27
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 2016-04-21
    • 2012-05-07
    相关资源
    最近更新 更多