【问题标题】:How do I get day number from a date in abap?如何从abap中的日期获取天数?
【发布时间】:2015-10-06 10:58:50
【问题描述】:

我需要将 'MM/DD/YYYY' 格式的日期转换为表示它是一年中的哪一天的数字。即 '01/01/YYYY'=1 和 '12/31/YYYY'=365。 ABAP 中是否有任何内置函数可以执行此操作?我试过谷歌搜索,但找不到任何功能

【问题讨论】:

    标签: abap


    【解决方案1】:

    这里有一行代码:

    DATA(g_day) = p_date - CONV d( p_date(4) && '0101' ) + 1.
    

    【讨论】:

    • 非常好——我还没有习惯一直使用新的表达方式。
    【解决方案2】:

    绝对没有必要依赖系统中可能存在或不存在的任何功能模块。只需使用基本的内置语言元素:

    DATA: l_my_date TYPE d, " note that the data type D is YYYYMMDD 
          l_jan_01  TYPE d, " This will be jan 1 of the needed year
          l_day     TYPE i.
    
    l_my_date = ...whatever... 
    l_jan_01 = l_my_date. 
    l_jan_01+4 = '0101'. " or any other means to get the first day of the year. 
    l_day = l_my_date - l_jan_01 + 1.    
    

    【讨论】:

    • 我可能会在数据声明部分将l_jan_01 设置为'19700101'。然后将l_my_date(4) 移动到l_jan_01(4)
    • @vwegert 嗨,我很佩服你的答案和 cmets,其实我觉得你的答案更有效率,但是,如果 SAP 中存在该功能,我为什么要创建自己的?
    • @nmiranda 因为您可能正在使用未记录的未发布内部函数,该函数可能随时消失,恕不另行通知。我更喜欢使用支持的内置语言语句...
    【解决方案3】:

    您可以使用这个功能模块:HR_AUPBS_MONTH_DAY

    你必须传递一个初始日期和一个结束日期,它会返回中间的天数(这是你想要的):

    CALL FUNCTION 'HR_AUPBS_MONTH_DAY'
      EXPORTING BEG_DA     = P_BEGDA    " Here you should put the first day of the year
                END_DA     = P_ENDDA    " Here you put the date
      IMPORTING NO_CAL_DAY = P_CAL_DAY. " This is what you want
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 1970-01-01
      • 2020-10-27
      • 2012-05-03
      • 1970-01-01
      相关资源
      最近更新 更多